Baekjoon Online Judge [Python] 10250번 ACM 호텔

2024. 11. 27. 02:43CODING/BOJ [python]

320x100

 

 

엘리베이터와 가까운 층을 우선으로 배정해주는 호텔에서 호수를 구하는 문제입니다.

문제

 

 

이번 문제는 조금 복잡합니다..ㅠㅠ

입력
H == 호텔의 층 수
W == 각 층의 방 수
N == 손님의 순서

출력
방 번호

 

입출력 조건

 

 

오늘도 등장한 그림판 ^^

엘리베이터와 가장 가까운 호수부터, 아래에서 위쪽으로 방이 배정됩니다.

즉, 1번으로 101호부터 H의 층까지 배정한 후,

2번으로 102호부터 H의 층까지 배정을 받는 것입니다.

 

설명

 

H==6, W==12, N==? 일 때,

N==1 101

N==2 201

N==3 301

...

N==6 601

 

N==7 102

N==8 202

이렇게 방이 배정는 것입니다.

 

 

여러번 시도 끝에 해결했습니다ㅎㅎ

if문에 들어가는 조건을 뒤늦게 고려했습니다..허허

T = int(input())

for _ in range(T):
    H, W, N = map(int, input().split())
    floor=N%H
    room=N//H+1
    if N%H == 0:
        room = N//H
        floor = H
    print(floor*100 + room)

 

H==3 && N==7이라면, 3만큼 올라갔다가 다시 1층으로 내려와 3만큼 올라가고 남은 1이 해당 층이 되는 방식입니다.

몫만큼 옆으로 이동하고 나머지만큼 층수가 올라가는 것입니다.

그렇기에 층수 floor은 N%H이 됩니다.

 

호수는 몫만큼 옆으로 이동한 것에서 나머지 값이 있는 부분이 되어야 합니다.

즉, H==3 && N==7이라면, 3만큼 2번 이동한 값에서 나머지가 있는 부분인 1을 더해야 하기 때문에 003호가 됩니다.

그렇기에 호수 room은 N//H +1이 됩니다.

 

여기서 추가적으로 만들어 줘야 하는 조건은 나머지가 0이 될 때 입니다.

나머지가 0이 된다는 것은 제일 꼭대기 층에 위치한다는 의미가 됩니다.

그렇기에 최대 층수인 H값이 그대로 floor이 되는 것이고,

room또한 몫에서 더할 나머지 값이 없기 때문에 N//H가 됩니다.


이로써 Class 1단계의 문제들을 모두 해결했습니다~~

 

ACM 호텔은 예전부터 못풀었던 문제였는데.. 계산식을 찾아내서 뿌듯합니다ㅎㅎ

class 1 clear

320x100
320x100