Baekjoon 10250번 ACM 호텔 python
https://www.acmicpc.net/problem/10250
문제를 읽어보면 알겠지만예를 들어 설명하는 편이 쉬울 것 같다.
가령 Height=3, Width=6인 다음의 표를 보자.
301 | 302 | 303 | 304 | 305 | 306 |
---|---|---|---|---|---|
201 | 202 | 203 | 204 | 205 | 206 |
101 | 102 | 103 | 104 | 105 | 106 |
조건을 읽어보면 기본적인 순서는 세로 즉 Height를 기준으로 일의 자리 숫자가 증가하는 것을 볼 수 있는데 순서는 다음과 같다.
3 | 6 | 9 | 12 | 15 | 18 |
---|---|---|---|---|---|
2 | 5 | 8 | 11 | 14 | 17 |
1 | 4 | 7 | 10 | 13 | 16 |
즉 다시말해 우리가 N번째의 사람이 어느 호실을 선택할 지를 판단하기 위해서는 우선 N을 Height인 H로 나눈 몫 + 1을 십의 자리와 일의 자리에 해당하게 한 다음 층에 대한 것은 N을 Height인 H로 나눈 나머지로 정의하면 딱 맞다.
다만 여기에는 함정이 하나 있는데 이렇게 설정할 경우 나머지가 0인 경우가 생길 때 오류가 생기는데 가령 지금의 상황에서 N=6이라고 가정해보자
그럼 N % H =0이 되고 이에 따른 N // H +1 = 6 // 3 +1 = 3으로 오류가 생기기 때문에 이에 맞는 조건문을 만들어야 문제가 생기지 않는다.
자세한 내용은 아래 코드를 통해 확인하길 바란다.
참고로 첫 번째 코드는 string으로 변환해서 십의 자리를 0으로 채운 경우이고
두 번째 코드는 기존의 int에 100을 곱해서 그냥 숫자로 바로 나타낸 것으로 두 번째 코드가 더 깔끔하다는 사실을 알 수 있다.
#첫 번째 코드
T=int(input())
for i in range(T):
H,W,N=map(int, input().split())
one=N // H + 1
floor = N % H
if not floor:
floor = H
one = N // H
if one < 10:
roomNum = int(str(floor)+'0'+str(one))
else:
roomNum=int(str(floor)+str(one))
print(roomNum)
#두 번째 코드
T=int(input())
for i in range(T):
H,W,N=map(int, input().split())
one=N // H + 1
floor = N % H
if not floor:
floor = H
one = N // H
roomNum = floor * 100 + one
print(roomNum)
ALL RIGHT RESERVED TWINSTARINFO