출처: 백준 10250번 ACM 호텔
방문하는 손님 순서대로 그림의 왼쪽 아래부터 오른쪽 위로 방을 배정해 주면 되는 문제이다.
방문하는 손님의 순서가 H의 배수, 즉 6의 배수라면 가장 높은 층 (6층)을 배정해 주게 된다.
그리고 나머지 호수 부분은 6으로 나눴을 때의 몫이 된다. (N//H
)
손님의 순서를 6으로 나눴을 때의 몫이 10보다 작다면, 호수의 가운데 부분에 0을 넣어주면 된다.
ex) 여섯 번째 손님의 경우, 6으로 나눴을 때 몫은 1이고 나머지는 0이다.
호수는 601호를 배정받게 된다.
손님의 순서가 6의 배수가 아닐 때에는, 6으로 나눴을 때의 나머지 값을 층으로 배정해 주게 된다.
이때에는, 6으로 나눴을 때의 몫에 1을 더해준 값이 나머지 호수 부분이 된다. (N//H + 1
)
손님의 순서를 6으로 나눴을 때의 몫이 9보다 작다면, 호수의 가운데 부분에 0을 넣어주면 된다.
ex) 첫 번째 손님의 경우, 6으로 나눴을 때 몫은 0이고 나머지는 1이다.
호수는 101호를 배정받게 된다.
case = int(input())
for i in range(case):
H,W,N = map(int,input().split())
if N%H == 0:
if N//H < 10:
number = str(H)+'0'+str(N//H)
else:
number = str(H)+str(N//H)
else:
if N//H < 9:
number = str(N%H)+'0'+str(N//H+1)
else:
number = str(N%H)+str(N//H+1)
print(number)
처음 풀었을 때에는, 6층이 아닌 손님들 조건문을 N//H < 10
으로 똑같이 했다가 여러 번 틀렸던 경험이 있다.