본문 바로가기
백준 알고리즘(BOJ)

백준 알고리즘 10250 (ACM 호텔) - python

by Think_why 2019. 10. 15.

[문제] 백준 알고리즘 10250 (ACM 호텔) - python

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

 

10250번: ACM 호텔

문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정

www.acmicpc.net

 

호텔의 H(층의 수), W(호의 수)와 N 번째 손님이 주어진다. (사실상 W의 의미는 H*W가 N보다 크기만 하면 된다.)

N번째 손님이 채워지는 방법은 간략하게 표현하면, H명이 차면 1호씩 늘어나는 셈이다.

따라서, 최대 호수는 N /H를 올림한 수이고, N % H가 마지막 호수에 남는다.

 

원래 올림은 math.ceil()을 써야하는데, N, H의 몫과 나머지만으로 해결 가능할 것 같아서 굳이 쓰지 않았다.

N%H가 0일 때만 N/H의 올림을 해도 값이 변함이 없는 것을 이용했다.

나머지가 0이 아닌 모든 경우는 N//H에 +1한 결과가 올림이다.

 

그래서 간편하게 divmod()를 이용해 div(=N//H)와 mod(=N%H)를 구한 다음,

mod가 0일때는 H와 div를 출력(mod가 0이므로 H로 출력), 그 외에는 mod와 div+1을 출력했다.

이렇게 구상했더니 코드는 아주 간단해졌고, 쉽게 풀렸다.

 

[Code]

T = int(input())
for _ in range(T):
    H, W, N = map(int, input().split())
    div, mod = divmod(N, H)
    if mod == 0:
        print('{}{:02d}'.format(H, div))
    else:
        print('{}{:02d}'.format(mod, div+1))
728x90

댓글