ACM 호텔
https://www.acmicpc.net/problem/10250
손님들이 방을 선호하는 기준은
1. 엘리베이터로부터의 거리
2. 층수
이므로 엘리베이터에서 가까운 방부터 배정한다. 1호들부터 101호, 201호, 301호... H01호까지 배정한 후 102호, 202호, 302호... H02호까지 배정한다. 그러므로 객실 배정은 H(호텔의 층 수)와 관련되어있다.
H=4, W=4인 호텔에 손님들을 순서대로 배정할경우 다음과 같다.
1번째부터 4번째 손님은 1호실, 5번째부터 8번째 손님은 2호실에 배정된다.
호실이 정해지는 규칙을 대략적으로 보면 N번째 손님이 몇 호인지 결정하는 것은 N을 H로 나눴을 때의 몫이고, 층수를 결정하는 것은 N을 H로 나눴을 때의 나머지이다. 그런데 나머지가 0인 경우는 따로 생각해야 한다.
나머지가 0이 아닌 경우는
호수는 몫 +1, 층수는 나머지를 그대로 사용하면 된다.
하지만 나머지가 0인 경우에는 (몫+1) 호실이 아니라 (몫)과 같은 수의 호실에 배정되고, 층수는 최대층인 H층에 배정된다.
작성한 코드
1
2
3
4
5
6
7
8
9
|
T = int(input())
for _ in range(T):
H, W, N = map(int, input().split())
Y = N % H # 층
X = (N // H) + 1 # 호
if Y == 0:
Y = H
X -= 1
print(f"{Y}{X:0>2}")
|
cs |
대부분의 경우가 나머지가 0이 아니므로 층수는 나머지로, 호실은 몫 +1을 대입하고 0인 경우만 조정해준다.
화면에 출력되는 호는 f-string을 이용해 화면에 출력한다.
예제 출력을 확인해보면 층수는 한자리수여도 그대로 출력하지만 호수는 10보다 작아도 2자리를 차지해야 하기 때문에 {X:0>2}로 표현한다.
(X: X의 값을 출력한다, 0: 빈칸을 0으로 채움, > : 오른쪽 정렬, 2: 2자리수 차지)
차근차근 생각해보면 어렵지 않은 문제인데 나머지가 0인 경우때문에 헷갈린 문제였다. 그림으로 그려서 확인하는게 도움이 됐는데 그림으로 전체적인 모습을 보면 훨씬 규칙이 한눈에 들어오는 것 같다.
'알고리즘' 카테고리의 다른 글
백준 - 1011번 (0) | 2021.08.03 |
---|---|
백준 - 2775번 / 함수의 호출 횟수(counter) (0) | 2021.08.03 |
백준 - 2869번 (0) | 2021.08.03 |
백준 - 1316번 (0) | 2021.08.03 |
백준 - 2941번 / replace() (0) | 2021.08.02 |