생각보다 쉬운 문제 같지만 또 복잡한 문제이기도 하다:
import sys
T = int(sys.stdin.readline())
for i in range(T):
H, W, N = map(int, sys.stdin.readline().split())
if N%H == 0:
if len(list(str(N//H))) == 1:
print(str(H) + '0' + str(N//H))
else:
print(str(H) + str(N//H))
else:
if len(list(str((N//H)+1))) == 1:
print(str(N%H) + '0' + str((N//H)+1))
else:
print(str(N%H) + str((N//H)+1))
우선, 호텔을 일반적으로 층별로 채우는 것이 아닌 호수별로 채운다고 생각하면서 풀어야 한다. 즉, 1호 라인이 다 채워지면 그 다음인 2호 라인, 3호 라인... 순서대로 채운다고 생각해야 한다. 따라서 다음과 같이 if문
을 나누었다:
N%H == 0
, 즉 묵으려는 손님의 순서(N번째)가 호텔의 층의 개수와 나누어떨어질 경우와, 그렇지 않을 경우이다. 나누어 떨어지는 경우, 또 N//H
값을 조사하는데, 이는 손님이 지내게 될 호수가 10의 자릿수인지, 아니면 1의 자릿수인지 확인해주는 작업이다. 그에 따라 앞에 0을 붙이냐 마냐가 좌지우지 된다.
N%H != 0
인 경우도 비슷한 경우이다. 다만 호수를 체크해주는 방법은 N%H == 0
와는 사뭇 다르다. N%H == 0
경우에는 손님의 순서가 나누어 떨어지기 때문에, 단순히 몫만 계산하여 출력하면 됐지만, N%H != 0
인 경우에는 몫을 조사하고 그 후 호수를 1을 더해주어야 한다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 2581번> 소수 (0) | 2020.11.26 |
---|---|
<백준 문제풀이: 1978번> 파이썬 - 소수 찾기 (0) | 2020.11.25 |
<백준 문제풀이: 2444번> 파이썬 - 별 찍기 - 7 (0) | 2020.11.24 |
<백준 문제풀이: 10870번> 파이썬 - 피보나치 수 5 (0) | 2020.11.24 |
<백준 문제풀이: 10872번> 파이썬 - 팩토리얼 (0) | 2020.11.24 |