티스토리 뷰
접근법
문제가 길어서 어려워 보이지만 그렇게 어렵지 않게 풀 수 있다.
핵심은 H(높이) 와 W(호수)에서 N번째 손님은 몇 번째 W에 속하는가이다.
즉, N을 H로 나누면 어느 정도 W에 위치하는지에 대한 정보를 구할 수 있다!
아래 표를 예시로 보자. 높이 4에 너비가 5인 호텔이라고 가정하자.
여기서 15번째 손님에 대해 방 배정을 할 경우 15를 높이인 4로 나누어 보자.
몫이 3에 나머지가 3이나온다. 즉, 나머지가 있을 때는 (몫 + 1) 의 W에 위치한다는 것을 알 수 있고,
그 높이는 나머지만큼 올라간다. (3층의 4호)
두번째로 12번째 손님에 대해서 방배정을 해보면 같은 방법으로 몫이 3에 나머지는 없다.
이 경우에는 몫에 해당하는 W의 가장 꼭대기층 (H값) 에 있음을 알 수 있다. (4층의 3호)
4 | 8 | 12 | 16 | 20 |
3 | 7 | 11 | 15 | 19 |
2 | 6 | 10 | 14 | 18 |
1 | 5 | 9 | 13 | 17 |
위 예시를 통해서 일반화를 해보자. N을 H로 나눈 값에 대해서,
- 나머지가 없을 때
층은 무조건 H값을 가지며 호수는 몫에 해당하는 값을 가진다. ( H층의 몫 호 ) - 그 외 나머지가 있는 경우
층은 나머지 값에 해당하는 값만큼을 가지며, 호수는 몫 + 1 에 해당하는 값을 가진다. ( 나머지 값 층의 몫 +1 호 )
풀이
case = int(input())
for i in range(case):
H, W, N = map(int, input().split(' '))
room_num, rem = divmod(N, H)
if rem == 0:
print(str(H) + str(room_num).rjust(2,'0'))
else :
room_num += 1
print(str(rem) + str(room_num).rjust(2,'0'))
출력은 무조건 호수로 출력을 해야 하기 때문에 생각이 조금 필요했다.
층은 그대로 출력해도 되지만, 호수의 경우 일의 자리일 때는 앞에 0을 붙여줘야 해서
if를 써야 하나 했지만 rjust를 사용해서 비교적 간단하게 코딩을 할 수 있었다.
(1번 인수 값만큼 자리를 고정하고 왼쪽에 2 인수 자리에 지정한 값을 채워 넣는다.)
'프로그래밍 > BOJ' 카테고리의 다른 글
백준 #1011: Fly me to the Alpha Centauri (0) | 2020.01.19 |
---|---|
백준 #2775: 부녀회장이 될테야 (0) | 2020.01.19 |
백준 #2869: 달팽이는 올라가고싶다 (0) | 2020.01.17 |
백준: #단계별로 풀어보기, 수학 (1) (0) | 2020.01.13 |
백준: #단계별로 풀어보기, 문자열 (2) (0) | 2020.01.12 |
댓글