문제풀이/#Python

백준(Baekjoon) 10250번 : ACM 호텔

 

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net

문제 출처 : https://www.acmicpc.net/problem/10250

# 코드

T = int(input()) #test Case
Guest = []
for i in range(T):
   H,W,N = map(int, input().split()) #H : Hotle Floor, W : Floor Room, N : Guest
   
   Guest_Floor = N%H 
   Guest_count = N//H + 1
   
   if N%H == 0:
      Guest_count = N//H
      Guest_Floor = H
    	  
   print("%d%02d"%(Guest_Floor,Guest_count))

 

# 풀이 과정

1. 입력 값 확인 (문제 풀이 조건 확인)

T = 테스트 Case 
H = 호텔 층 수
W = 각 층의 방 갯수
N = N번째 손님

2. 출력 값 확인

N번째 손님이 배정 받을 호텔 방 번호 출력 [방번호는 YXX 또는 YYXX 형태이다. (Y = 호텔 층수, X= 각 층의 방)]
- 각 층의 방 출력 시 2자리로 출력이 필요 (ex : 01, 02, 03)

3. 조건 확인

* 문제의 단순화를 위해 직사각형 모양으로 가정, 정문과 엘레베이터 사이의 거리는 생략

1. 고객이 선호하는 방을 순서대로 배정을 한다
-  고객은 호텔 정문으로부터 가까운 방을 선호 (ex : 101 > 102, 201 > 203)
-  고객은 엘레베이터 타고 이동하는 거리를 신경쓰지 않지만 정문과의 거리가 같다면 낮은 층을 선호
(ex : 101 > 201, 201 > 102, 401 > 102)

2. 방번호는 YXX 또는 YYXX 형태이다. (Y = 호텔 층수, X= 각 층의 방)
- (ex : YXX = 101, 212, 230, 341 / YYXX = 1101, 1221, 1230, 1209)

3. 호텔의 최대 층수는 99, 최대 방 수는 99이다. 그리고 손님 수는 호텔 최대 인원 이상이 올 수는 없다.
 (1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).

3. 1차 풀이

H = 호텔 층 수, W = 각 층의 방 갯수, N = N번째 손님
1. 호텔 층 수 기준으로 고객을 순차적으로 배치 
(6층 5개 방 기준 ex : 1번째 : 101, 2번째 201, 3번째 301, 4번째 401, 5번째 501, 6번째 102, 7번째 202 ... )

N%H : 배정 받을 층 수
N//H + 1 : 배정 받을 방 (00번째 호실은 없으므로 1을 추가)

4. 풀이 중 생각을 해야 했던 예외 상황

인원수와 층수가 딱 나눠 떨어졌을 경우
1. N%H 가 0 값이 나옴
- 0번째 층이 없으므로 예외처리 필요
- 6층이 있지만 6번째 손님이 102호실을 배정받는 오류 발생 예외처리 필요