🥕 [ 백준 10250 ] ACM 호텔
문제 링크
url : https://www.acmicpc.net/problem/10250
🍒 문제 분석
$$ 101 \rightarrow 201 \rightarrow 301 \rightarrow .. 106 \rightarrow 102 \rightarrow 202 \rightarrow\ ..\ \rightarrow 512 \rightarrow 612 $$
다음과 같은 순번으로 손님을 배정한다고 하자.
W, H가 주어졌을 때, N번 손님의 방과 호수를 구하시오.
🥑 코드
T = int(input())
for _ in range(T):
H, W, N = map(int, input().split())
X = N//H+1 # 호수는 H로 나눈 몫이다. 단, 처음은 0이 아니라 1부터 시작하기 때문에 1을 더해줘야함
Y = N%H # 층은 H로 나눈 후 나머지 값이다.
if N % H == 0 : # N이 H로 나누어 떨어지게 되면
Y = H # Y값은 0이 아니라 H가 되어야 한다.
X = N//H # X값은 N//H+1 이 아니라 N//H 이다.
# 이는 N%H 값이 0일 때, N//H 값이 알아서 1 올라간 상태이기 때문이다.
if X < 10 : # X가 10보다 작으면 X 앞에 '0'을 붙여줘야 한다.
X = '0'+str(X)
print('{}{}'.format(Y,X))
🍓 내 해결 과정
호수 는 H로 나눈 몫이고, 층은 H로 나눈 후 나머지 값이라는건 금방 나왔지만
문제는 호수와 층에 0이 없기 때문에 ( 100호 나 001호 등은 존재하지 않는다. )
이를 예외사항으로 두는데서 조금 오래걸렸다.
N이 H로 나눠지게 되면
가령 h = 3 , w = 1 건물이라면
1번째 손님은 : Y = 1%3 = 1, X = 1//3 + 1 = 1
2번째 손님은 : Y = 2%3 = 2, X = 2//3 + 1 = 1
3번째 손님은 : Y = 3%3 = 0, X = 3//3 + 1 = 2
3번째 손님은 103호여야 하나,
다음과 같이 H로 나눠지게 되므로써, X는 1 더 올라가고, Y는 0이 되어버린다.
이에 대한 예외 처리를 해주어야 했다.
🍉 깨달은 점 및 정리
몫과 나머지를 가지고 응용하는 문제에서는 항상
나누어 떨어질 때의 상황이 예외가 되나 안되나를 생각해보도록 하자.
'코딩테스트 > 백준 단계별' 카테고리의 다른 글
[백준 9단계] 11729 하노이의 탑 이동 순서 (0) | 2022.05.16 |
---|---|
[백준 7단계] 2775 부녀회장이 될테야 (중요) (0) | 2022.05.13 |
[ 백준 7단계 ] 2869 달팽이는 올라가고 싶다. (0) | 2022.05.13 |
[백준 7단계] 1193 분수찾기 (군수열) (0) | 2022.05.12 |
[백준 7단계] 2292 벌집 (0) | 2022.05.12 |