Dandy Now!
  • [알고리즘][파이썬] 백준_10250번_ACM 호텔
    2021년 11월 23일 17시 45분 44초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    [그림1] ACM 호텔 정면도

     

    (T)명의 손님에 대하여 호텔의 층 수(H), 각 층의 방 수(W), 몇 번째 손님(N)이 주어질 때 방 번호를 출력해야 한다.

    만약 7번째 손님이라면 102호에 배정한다.


    1차 시도

    # 1차시도(결과: 틀렸습니다)
    T = int(input())
    
    for i in range(T):
        H, W, N = map(int, input().split())
    
        rn = 0 # 방 번호
        fl = 0 # 층 수
    
        if N % H == 0:
            fl = H
        else:
            fl = N % H
    
        rn = N // H + 1
    
        print(fl * 100 + rn)

     

    N번째 손님을 H층으로 나눈 나머지가 0일때의 경우에 대한 처리가 문제였다.

    그 경우에는 방번호를 구할때 +1을 하지 말아야 한다.


    2차 시도

    # 2차시도(결과: 맞았습니다)
    # N번째 손님을 H층으로 나눈 나머지가 0일때는 방 번호를 구할때 +1을 하지 않는다.
    T = int(input())
    
    for i in range(T):
        H, W, N = map(int, input().split())
    
        rm = 0 # 방 번호
        fl = 0 # 층 수
    
        if N % H == 0:
            fl = H
            rm = N // H
        else:
            fl = N % H
            rm = N // H + 1
    
        print(fl * 100 + rm)

     

    성공!


    해결한 방법

    문제에 제시된 ACM 호텔 정면도를 [그림2]와 같이 좀 더 간단하게 그려 보았다.

    객실 수도 9개로 줄였다.

    [그림2] 객실번호

     

    각 방 별로 손님은 [그림3]과 같은 순서로 배정된다.

    [그림3] 손님 배정 순서

     

     

    만약 [그림3]의 손님 2번의 방을 배정한다면,

    [그림2]의 201호 임을 알 수 있는 식을 만들어야 한다.

    더보기

    방 번호 설정 규칙

    200은 층 수에 100을 곱한 값이고, 1은 그 층의 첫 번째 방이다.

    그래서 방 번호는 201이다.

     

    2번 손님을 층수 3으로 나누면 몫은 0, 나머지는 2이다.

    이때 몫은 방 번호, 나머지는 층 수가 되는데,

    0인 방 번호는 없으므로 +1한다.

    방 번호 = N // H + 1
    층 수 = N % H

     

    하지만 위 식이 모든 경우에 통용되는 것은 아니다.

    만약 나머지가 0인 경우(N % H = 0)에는 다음의 식을 적용해야 한다.

    방 번호 = N // H
    층 수 = H

     

    728x90
    반응형
    댓글