[파이썬/Python] 백준 10250번: ACM 호텔

·2024년 6월 27일
0

알고리즘 문제 풀이

목록 보기
6/105
post-thumbnail

📌 문제 : 백준 10250번



📌 문제 탐색하기

H : 호텔의 층 수 (1 ≤ H ≤ 99)
W : 각 층의 방 수 (1 ≤ W ≤ 99)
N : 손님 순서 (1 ≤ N ≤ H × W)

✅ 입력 조건
1. 테스트케이스 수 입력
2. H W N 순서로 입력
✅ 출력 조건
1. 테스트케이스 별로 N번째 손님에게 배정되어야 할 방 번호 출력

가능한 시간복잡도

for문으로 N번 반복해 대소 비교 → O(N)O(N)

최종 시간복잡도
O(n)O(n)

알고리즘 선택

for문으로 반복하며 방 번호 연산



📌 코드 설계하기

  1. 테스트케이스 수 입력
  2. H(호텔 층 수), W(각 층의 방 수), N(손님 순서) 입력 받기
  3. 테스트케이스마다 N번째 손님의 방 번호 출력
  4. 층 수 계산
  5. 방 번호 계산
  6. 층 수가 0이 나오면 꼭대기 층이기 때문에 방 번호는 한 칸 줄어야 한다.


📌 시도 회차 수정 사항

1회차

if N // H >= 9:
        answer = floor * 1000 + room
else:
        answer = floor * 100 + room
  • 고려하지 못한 반례가 있는 것 같은데 정확한 원인 파악은 하지 못했다.
  • https://www.acmicpc.net/board/view/144555
    • 찾아본 반례에서 N // H == 9인 경우에 층 수가 2자리 수여야 하는데 아닌 것 같아서 이런 식으로 예외처리를 해주었다
    • 알고보니 ans와 result를 반대로 이해해서 엉뚱하게 코드를 고쳤다....

2회차

if floor == 0:
    floor = H
    room -= 1
  • 고려하지 못했던 부분이 바로 N번째 손님이 꼭대기 층에 배정될 경우였다.
  • floor == 0인 경우는 0층이 되므로 전체 층수로 변경한다.
  • 방 번호를 하나 줄인다.


📌 정답 코드

import sys

input = sys.stdin.readline

# 1. 테스트케이스 수 입력
T = int(input())

# 2. H(호텔 층 수), W(각 층의 방 수), N(손님 순서) 입력 받기
hotels = [list(map(int, input().split())) for _ in range(T)]

# 3. 테스트케이스마다 N번째 손님의 방 번호 출력
for hotel in hotels:
    H, W, N = hotel[0], hotel[1], hotel[2]

    # 3-1. 층 수 계산
    floor = N % H
    # 3-2. 방 번호 계산
    room = N // H + 1

    # 3-1. 층 수가 0이 나오면 꼭대기 층이기 때문에 방 번호는 한 칸 줄어야 한다.
    if floor == 0:
        floor = H
        room -= 1

    print(floor * 100 + room)
  • 결과



📌 회고

  • 작성한 코드의 반례를 찾는 것이 어려웠던 것 같다. 이번 문제는 결과가 맞았는지 틀렸는지 확인할 수 없었다면 맞은 줄 알고 넘어갔을 것이다.
  • 반례를 찾는 연습이 필요할 것 같다.

0개의 댓글

관련 채용 정보