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)

댓글남기기