출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기


생각보다 쉬운 문제 같지만 또 복잡한 문제이기도 하다:

import sys

T = int(sys.stdin.readline())

for i in range(T):
    H, W, N = map(int, sys.stdin.readline().split())
    if N%H == 0:
        if len(list(str(N//H))) == 1:
            print(str(H) + '0' + str(N//H))
        else:
            print(str(H) + str(N//H))
    else:
        if len(list(str((N//H)+1))) == 1:
            print(str(N%H) + '0' + str((N//H)+1))
        else:
            print(str(N%H) + str((N//H)+1))


우선, 호텔을 일반적으로 층별로 채우는 것이 아닌 호수별로 채운다고 생각하면서 풀어야 한다. 즉, 1호 라인이 다 채워지면 그 다음인 2호 라인, 3호 라인... 순서대로 채운다고 생각해야 한다. 따라서 다음과 같이 if문을 나누었다:

N%H == 0, 즉 묵으려는 손님의 순서(N번째)가 호텔의 층의 개수와 나누어떨어질 경우와, 그렇지 않을 경우이다. 나누어 떨어지는 경우, 또 N//H값을 조사하는데, 이는 손님이 지내게 될 호수가 10의 자릿수인지, 아니면 1의 자릿수인지 확인해주는 작업이다. 그에 따라 앞에 0을 붙이냐 마냐가 좌지우지 된다.
N%H != 0 인 경우도 비슷한 경우이다. 다만 호수를 체크해주는 방법은 N%H == 0와는 사뭇 다르다. N%H == 0 경우에는 손님의 순서가 나누어 떨어지기 때문에, 단순히 몫만 계산하여 출력하면 됐지만, N%H != 0 인 경우에는 몫을 조사하고 그 후 호수를 1을 더해주어야 한다.