ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 10250 ACM 호텔
    Python_알고리즘 2021. 7. 13. 06:04
    문제 바로가기

       문제분석   

    # 각 층에 W개의 방이 있는 H층 건물
    # 방 번호는 YXX, YYXX로 하는데, Y는 층수를 뜻하며 X는 엘베에서부터 세었을때 떨어진 거리
    # 각 방의 거리는 1로 동일
    # 거리가 같을때는 아래층 방 선호
    # 따라서 채우는 순서는 엘베로부터 떨어진 거리가 1인 H층의 1층부터 H층까지 채우고,

      그 다음 떨어진 거리가 2인 H층의 1층부터 H층까지 채우는 식.

    # n번째 손님이 배정받아야 하는 방 번호 출력문제

    # 파이썬의 표준입력은 input(), 표준출력은 print()함수를 지원한다.

     

    만약 H, W, N이 각각 5, 4, 9라면, 손님이 채워지는 순서는 아래와 같다.

    elev. 5 (501호)      
    4 (401호) 9 (402호)    
    3 (301호) 8 (302호)    
    2 (201호) 7 (202호)    
    1 (101호) 6 (102호)    

    - 9번째 손님은 4층에 위치하며 엘베로부터 2거리만큼 떨어진 402호에 배정받는다.

    - 여기서 규칙을 찾을 수 있는데,

      ① 손님의 번호가 H를 넘어가면 N % H(N번째 손님을 층수로 나눈 나머지)만큼의 층에 머무르고, 

      ② (N // H) + 1만큼 즉, (N번째 손님을 층수로 나눈 몫) + 1만큼 엘베에서 떨어진 곳에 머무른다.

      ※ 주의할 부분은 ①의 나머지가 0으로 나눠 떨어질 때를 고려해줘야 한다.

     

       문제풀이   

    t = int(input())    # 테스트 케이스 개수 입력 받음
    
    for i in range(t):  # 테스트 케이스로 입력받은 수만큼 for문 반복
        h, w, n = map(int, input().split())   # h=각 호텔의 층 수, w=각 층의 방 수, n=몇 번째 손님
    
        floor = n % h   # n번째 손님이 머무를 층수
        line = (n // h) + 1   # n번째 손님이 머무를 호수
        if floor == 0:  # 만약 층수가 0으로 떨어진다면 제일 꼭대기에 위치해 있는다는 뜻이므로
            floor = h   # 머무르는 곳과 층수의 값이 같아지고
            line -= 1   # 몫이 하나 늘어난걸 빼줘야 함
    
        print(floor * 100 + line) 

    # 테스트 케이스 수를 입력값으로 받고 반복문을 돌린다.

    # 각 호텔의 층 수와 각 층의 방수, 몇번째 손님인지 입력값으로 받는다.

    # n번째 손님이 머무를 층수를 나머지로 구한 후, 호수를 몫에다가 +1을 해줘서 구한다.

    # 이 때, 나머지가 0이라면 제일 윗층에 있다는 뜻이므로 층수는 머무르는 곳과 값이 같아지고

    # 몫이 하나 늘어난걸 빼주면 호수가 된다.

    # n번째 손님의 방이 몇호인지 구하는 것이므로 조건에서 주어진 H와 W(1 ≤ H, W ≤ 99)의 범위를 고려해, 층수에 100을 곱하고 호수를 더해줘 방 번호를 출력한다.

     

    댓글

Designed by Tistory.