https://www.acmicpc.net/problem/10250
문제를 요약하면 다음과 같다.
(정문이 어디 있다는 건지 이해하는 데 오래 걸렸는데 1층 엘리베이터 근처인 것 같다.)
손님들은 1층 엘리베이터에서 가까운 방일수록 선호한다.
예를 들어 5층짜리 호텔이라면... 101, 201, 301, 401, 501까지 배정하고 그 다음에 102, 202, 302, 402, 502, 103... 이렇게 배정한다.
그러므로 몇 호인지는 int((n-1)/h)+1
로 구한다.
5층 기준, 1번째 손님은 100호가 아니라 101호로 가고,
5번째 손님은 102호가 아니라 501호로 가기 때문이다.
몇 층인지는 n%h!=0
인 경우는 n%h
로 구한다.
5층 기준 1,2,3,4번째 손님은 각각 1,2,3,4층 01호로 가고
5번째 손님은 0층이 아니라 501호로 가야 하니까
n%h==0
인 경우의 층은 h
이다.
#H, W, N
def room_assignment(h, w, n):
row = int((n-1)/h+1) # 5층이라면 1,2,3,4,5까지 01호, 6,7,8,9,10까지 02호
height=n%h # 5층이라면 1은 101호 2는 201호 3은 301호 4는 401호 5는 501호
if height==0:
height=h
return height*100+row
#print(room_assignment(30, 50, 72))
counter=int(input(""))
table=[]
while counter>0:
n1,n2,n3=input("").split()
table.append(room_assignment(int(n1), int(n2), int(n3)))
counter-=1
#print(table)
for item in table:
print(item)
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
이번에도 input 값이 제일 헷갈렸다. 첫번째 줄에서는 데이터를 몇 묶음을 입력받는지 묻고 두 번째 줄부터 h, w, n 데이터를 한 줄에 한 묶음씩 입력을 받아서 정수로 처리하는 부분에서 계속 TypeError와 씨름했다. ㅋㅋㅋ
아무튼 제출했더니 한 번에 맞았다고 떠서 뿌듯하다! ㅋㅋㅋ