본문 바로가기

Programming/알고리즘

[python 파이썬] 백준 10250 ACM호텔

T = int(input())

for i in range(T):
    H, W, N = map(int, input().split())
    
    # 모든 방이 비어있고, 101, 201, 301,,.., 102, 202, 302,..순으로 방을 매긴다
    # N번째 손님이 들어가야 하는 방의 호수는 (N번째 손님을 층수로 나눈 몫 + 1)이다
    # N번째 손님이 들어가야 하는 방의 층수는 N번째 손님을 층수로 나눈 나머지이다
    a = (N // H) + 1 # 방의 호수
    b = N % H

    # 맨 꼭대기층의 경우
    if N % H == 0:
        b = H
        a = N // H

    if a < 10:
        print(str(b) + '0' + str(a))
    else:
        print(str(b) + str(a))

 

코드 설명

1. 접근 방법

4x5 건물 즉, 4층, 5호까지 있는 건물이라고 생각하면,

101 -> 201-> 301-> 401-> 102-> .....-> 405-> 505 순으로 손님을 배정해야 한다.

 

따라서, 4번째 온 손님은 401호에 머무르고,

5번째 온 손님부터는 102호에 다시 머무르게 하면 된다. 

 

즉,

N번째 손님이 들어가야 하는 방의 호수는 (N번째 손님을 층수로 나눈 몫 + 1)이다.

N번째 손님이 들어가야 하는 방의 층수는 N번째 손님을 층수로 나눈 나머지이다.

즉,

a = (N // H) + 1 # 방의 호수
b = N % H # 방의 층수

다만 예외가 있는데,

손님이 각 층의 맨 윗층에 머물러야 할 때는 위의 경우의 식에 해당하지 않는다.

 

# 맨 꼭대기층의 경우
if N % H == 0:
    b = H
    a = N // H

 

2. 개선점

나는 호수를 계산할때 
if a < 10:
    print(str(b) + '0' + str(a))
else:
    print(str(b) + str(a))

처럼 복잡하게 했지만,

 

print(f'{b*100+a}') 와 같이 f 포매팅을 사용하면 더 간결한 코드가 될 것 같다.