알고리즘 문제풀이: ACM 호텔 방 배정하기

NameError·2021년 4월 14일
0

문제 링크

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와 씨름했다. ㅋㅋㅋ

아무튼 제출했더니 한 번에 맞았다고 떠서 뿌듯하다! ㅋㅋㅋ

profile
매일 공부하며 살고 있구나

0개의 댓글