-
[항해99]알고리즘_03sparta/알고리즘 2021. 6. 17. 18:43
[Python] 백준 10250 AMC호텔
문제분석
# 각 층에 W개의 방이 있는 H층 건물
# 방 번호는 YXX, YYXX로 하는데, Y는 층수를 뜻하며 X는 엘베에서부터 세었을때 떨어진 거리
# 각 방의 거리는 1로 동일
# 거리가 같을때는 아래층 방 선호
# 따라서 채우는 순서는 엘베로부터 떨어진 거리가 1인 H층의 1층부터 H층까지 채우고,그 다음 떨어진 거리가 2인 H층의 1층부터 H층까지 채우는 식.
# n번째 손님이 배정받아야 하는 방 번호 출력문제
# 파이썬의 표준입력은 input(), 표준출력은 print()함수를 지원한다.
만약 H, W, N이 각각 5, 4, 9라면, 손님이 채워지는 순서는 아래와 같다.
elev. 5 (501호) 4 (401호) 9 (402호) 3 (301호) 8 (302호) 2 (201호) 7 (202호) 1 (101호) 6 (102호) - 9번째 손님은 4층에 위치하며 엘베로부터 2거리만큼 떨어진 402호에 배정받는다.
- 여기서 규칙을 찾을 수 있는데,
① 손님의 번호가 H를 넘어가면 N % H(N번째 손님을 층수로 나눈 나머지)만큼의 층에 머무르고,
② (N // H) + 1만큼 즉, (N번째 손님을 층수로 나눈 몫) + 1만큼 엘베에서 떨어진 곳에 머무른다.
※ 주의할 부분은 ①의 나머지가 0으로 나눠 떨어질 때를 고려해줘야 한다.
문제풀이
t = int(input()) # 테스트 케이스 개수 입력 받음 for i in range(t): # 테스트 케이스로 입력받은 수만큼 for문 반복 h, w, n = map(int, input().split()) # h=각 호텔의 층 수, w=각 층의 방 수, n=몇 번째 손님 floor = n % h # n번째 손님이 머무를 층수 line = (n // h) + 1 # n번째 손님이 머무를 호수 if floor == 0: # 만약 층수가 0으로 떨어진다면 제일 꼭대기에 위치해 있는다는 뜻이므로 floor = h # 머무르는 곳과 층수의 값이 같아지고 line -= 1 # 몫이 하나 늘어난걸 빼줘야 함 print(floor * 100 + line)
'sparta > 알고리즘' 카테고리의 다른 글
[항해99]알고리즘_06 (0) 2021.06.21 [항해99]알고리즘_05 (0) 2021.06.20 [항해99]알고리즘_04 (0) 2021.06.18 [항해99]알고리즘_02 (0) 2021.06.16 [항해99]알고리즘_01 (0) 2021.06.16