본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 10250번 ACM 호텔, 파이썬

by Godgil 2020. 4. 2.

백준 알고리즘 10250번 ACM 호텔, 파이썬

 

이번 문제는 백준 알고리즘의 10250번 ACM 호텔이다. 파이썬으로 풀어보았다.

 

그러니까 요약해보면, 손님들이 걷는게 귀찮으니까 많이 안걸어도 되는 방을 선호하기 때문에, 선착순으로 거리가 가까운 방을 배정하려고 하는 것이다.

엘리베이터와 제일 가까운쪽이 1호이고 먼쪽이 호텔의 길이 W호이다.

방의 호수는 호텔의 층 H와 W로 이루어진다.

 

그럼 문제를 파 보자.

# 조건 1. 입력은 첫째줄에 테스트 케이스의 수, 두번째 줄에, 층의 높이, 한층에 있는 방의 수, 배정 할 손님의 수가 주어진다. 

# 조건 2. 출력은 몇 호에 마지막 손님이 배치되는지이다.

 

문제에 대한 내 생각이다.

그 전에, 나는 이거 문제 보자마자 생각한게, 대체 W는 왜 필요한거지? 라는 의문이였다.

어차피 문제 조건에 H*W 보다 사람의 수는 적다고 조건에 나와있고, 방 배정하는데 필요한 인수는 H면 되기 때문이다.

그렇게 생각을 했다.

 

# 생각 1. 1번에 나온 예제를 잘 보면, 402호에 배정되었다는것은, 10명을 최대 층 H(6)으로 나눈 나머지이다.

# 생각 2. 402호에 배정된 걸 다시 또 보면, 호수는 10명을 최대 층 H(6)로 나눈 몫에 1을 더한 값이다.

# 생각 3. 그럼 W는 필요가 없다. 

 

이렇게 생각하고 코드를 짜 봤다.

try_num = int(input())

for i in range(try_num):
    H, W, P = map(int, input().split())
    if P % H == 0:
        floor = H
        Num = int(P/H)
    else:
        floor = P % H
        Num = int(P/H) + 1
    if Num >= 10:
        print(str(floor) + str(Num))
    else:
        print(str(floor) + '0' + str(Num))

나는 그냥 이렇게 짰다.

floor는 층이고, Num은 방 번호이다. 저렇게 조건문을 나눈 이유는

나눠떨어지는경우 0이나와서 0층으로 배정되기 때문이다. 그래서 그 경우는 그냥 최대 높이를 배정해 준다.

 

그리고 마지막 조건의 경우는 10호가 넘어가면 410 이렇게 붙지만,

10호가 안되는 경우는 49< 이런식으로 붙게 되니까, 중간에 0을 추가 해 줬다.

 

W는 대체 왜 받아야 하는 걸까?

다른 사람 코드를 한번 봐야겠다.

 

문제 출처

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

 

10250번: ACM 호텔

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

www.acmicpc.net

 

댓글