T = int(input())
for i in range(T):
H, W, N = map(int, input().split())
# 모든 방이 비어있고, 101, 201, 301,,.., 102, 202, 302,..순으로 방을 매긴다
# N번째 손님이 들어가야 하는 방의 호수는 (N번째 손님을 층수로 나눈 몫 + 1)이다
# N번째 손님이 들어가야 하는 방의 층수는 N번째 손님을 층수로 나눈 나머지이다
a = (N // H) + 1 # 방의 호수
b = N % H
# 맨 꼭대기층의 경우
if N % H == 0:
b = H
a = N // H
if a < 10:
print(str(b) + '0' + str(a))
else:
print(str(b) + str(a))
코드 설명
1. 접근 방법
4x5 건물 즉, 4층, 5호까지 있는 건물이라고 생각하면,
101 -> 201-> 301-> 401-> 102-> .....-> 405-> 505 순으로 손님을 배정해야 한다.
따라서, 4번째 온 손님은 401호에 머무르고,
5번째 온 손님부터는 102호에 다시 머무르게 하면 된다.
즉,
N번째 손님이 들어가야 하는 방의 호수는 (N번째 손님을 층수로 나눈 몫 + 1)이다.
N번째 손님이 들어가야 하는 방의 층수는 N번째 손님을 층수로 나눈 나머지이다.
즉,
a = (N // H) + 1 # 방의 호수
b = N % H # 방의 층수
다만 예외가 있는데,
손님이 각 층의 맨 윗층에 머물러야 할 때는 위의 경우의 식에 해당하지 않는다.
# 맨 꼭대기층의 경우
if N % H == 0:
b = H
a = N // H
2. 개선점
나는 호수를 계산할때
if a < 10:
print(str(b) + '0' + str(a))
else:
print(str(b) + str(a))
처럼 복잡하게 했지만,
print(f'{b*100+a}') 와 같이 f 포매팅을 사용하면 더 간결한 코드가 될 것 같다.
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 10869번 - 사칙연산 -Java[자바] (0) | 2022.11.22 |
---|---|
[백준] 1008번 - A/B JAVA [자바] (0) | 2022.11.22 |
[백준] 1000번 : A+B - JAVA [자바] (0) | 2022.11.22 |
[백준] 2557번 : Hello World - JAVA [자바] (0) | 2022.11.22 |
[python 파이썬] 백준 2839 설탕배달 (0) | 2022.03.10 |