알고리즘

백준 - 10250번

joy_lee 2021. 8. 3. 16:16

ACM 호텔

https://www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

 

 

손님들이 방을 선호하는 기준은

1. 엘리베이터로부터의 거리

2. 층수

이므로 엘리베이터에서 가까운 방부터 배정한다. 1호들부터 101호, 201호, 301호... H01호까지 배정한 후 102호, 202호, 302호... H02호까지 배정한다. 그러므로 객실 배정은 H(호텔의 층 수)와 관련되어있다.

 

H=4, W=4인 호텔에 손님들을 순서대로 배정할경우 다음과 같다.

1번째부터 4번째 손님은 1호실, 5번째부터 8번째 손님은 2호실에 배정된다.

호실이 정해지는 규칙을 대략적으로 보면 N번째 손님이 몇 호인지 결정하는 것은 N을 H로 나눴을 때의 몫이고, 층수를 결정하는 것은 N을 H로 나눴을 때의 나머지이다. 그런데 나머지가 0인 경우는 따로 생각해야 한다.

나머지가 0이 아닌 경우는

호수는 몫 +1, 층수는 나머지를 그대로 사용하면 된다.

하지만 나머지가 0인 경우에는 (몫+1) 호실이 아니라 (몫)과 같은 수의 호실에 배정되고, 층수는 최대층인 H층에 배정된다.

 

작성한 코드

1
2
3
4
5
6
7
8
9
= int(input())
for _ in range(T):
    H, W, N = map(int, input().split())
    Y = N % H # 층
    X = (N // H) + 1 # 호
    if Y == 0:
        Y = H
        X -= 1
    print(f"{Y}{X:0>2}")
cs

대부분의 경우가 나머지가 0이 아니므로 층수는 나머지로, 호실은 몫 +1을 대입하고 0인 경우만 조정해준다.

화면에 출력되는 호는 f-string을 이용해 화면에 출력한다.

예제 출력을 확인해보면 층수는 한자리수여도 그대로 출력하지만 호수는 10보다 작아도 2자리를 차지해야 하기 때문에 {X:0>2}로 표현한다.

(X: X의 값을 출력한다, 0: 빈칸을 0으로 채움, > : 오른쪽 정렬, 2: 2자리수 차지)

 

차근차근 생각해보면 어렵지 않은 문제인데 나머지가 0인 경우때문에 헷갈린 문제였다. 그림으로 그려서 확인하는게 도움이 됐는데 그림으로 전체적인 모습을 보면 훨씬 규칙이 한눈에 들어오는 것 같다.

'알고리즘' 카테고리의 다른 글

백준 - 1011번  (0) 2021.08.03
백준 - 2775번 / 함수의 호출 횟수(counter)  (0) 2021.08.03
백준 - 2869번  (0) 2021.08.03
백준 - 1316번  (0) 2021.08.03
백준 - 2941번 / replace()  (0) 2021.08.02