Baekjoon 문제 풀기 (10250번 : ACM 호텔) Python
10250번 : ACM 호텔
1. 문제읽기
구현하기
문제에서 주어진 조건에 맞는 답을 구현할 수 있는가를 테스트하는 문제같다.
첫번째는 호수가 10 미만일 때 0을 어떻게 구현하느냐가 힘들었고,
두번째는 역시나 규칙성을 찾는 것이 힘들었다.
2. 제출 코드
# 테스트 케이스 반복 입력 받기
t = int(input())
for i in range(1, t+1): # 1부터 t까지
h, w, n = map(int, input().split())
# h 리스트 만들기
h_list = []
for i in range(1, h+1): # 1부터 h까지
h_list.append(str(i))
# w 리스트 만들기
w_list = []
for i in range(1, w+1): # 1부터 w까지 0포함
if 1 <= i <= 9:
w_list.append("0"+str(i))
if i >= 10:
w_list.append(str(i))
# 방번호 배정 순서 리스트
room_num_list = []
for w in w_list:
for h in h_list:
room_num_list.append(h+w)
# 방번호 배정하기
print(room_num_list[n-1])
401, 402와 같은 방 번호에서 0을 어떻게 구현할 것인가에서 고민을 많이 했었다.
거기서부터 나온 추론이 문자열 리스트를 만들어서 문자열을 더하는 방식으로 방 순서를 배정해주자! 였다.
그래서 층 수 리스트와 호 수 리스트를 각각 만들어서 방 번호 배정 리스트를 만들어주었다.
아래를 보면 알겠지만 내가 만든 코드는 테스트 케이스 반복문을 빼면 시간 복잡도가 $n^2$이여서 안좋은 코드이다.
그래도 푼 것에 의의를 두겠다.. 점점 나아지겠지..
3. 공부할 것
다른 사람들 코드를 보니 나머지와 몫을 이용해서 쉽게 풀었다.
나머지와 몫을 생각하긴 했었는데 문자열 리스트에 꽂혀가지고 제대로 보지 못했다.
이런 종류의 문제는 나머지와 몫을 이용하면 쉽게 풀리는 유형의 문제인데 놓쳤다.
손님의 층 수는 n을 h로 나눈 나머지가 된다.
손님의 호 수는 n을 h로 나눈 몫에 1을 더하면 된다.
여기서 예외는 n%h가 0이 될 때인데, 규칙을 찾아보면 이 때 높이를 h로 만들어주고 호 수를 1 빼주면 된다.
그리고 내가 힘들어했던 0을 만드는 문제는 100을 곱해줌으로써 구현할 수 있다.
num = int(input())
for i in range(num):
H, W, N = map(int, input().split())
floor = N % H
room = N // H + 1
if floor == 0:
room -= 1
floor = H
print(floor*100 + room)
댓글남기기