2021. 2. 10. 00:45ㆍProblem Solving/BOJ
BOJ 10250. ACM 호텔
https://www.acmicpc.net/problem/10250
Logic
예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.
엘리베이터로 이동하는 거리는 무시한다고 했다. 그러면 방이 배정되는 순서는 101, 201, 301, 401,,, 다음은 102, 202, 302,, 이렇게 될 것이다.
왜냐? Y01호들은 모두 이동거리가 1이다. 엘리베이터로 이동하는거리는 무시하니까. 그렇다면 이동거리가 1인 방부터 배정해야 한다. 걷는 거리가 같을 때에는 아래층의 방을 더 선호하기 때문에 아래부터 배정한다.
그럼 이렇게 된다. (H가 10일때.)
H=6, N=10일땐 6번째 손님까지 Y01호에 채우고, 그다음 7번째 손님은 102, 8번째는 202, 9번째는 302, 10번째는 402이므로 답은 402가 되겠다.
그리고 여기서 W는 전혀.. 신경 쓸 필요가 없다.
여기까지 하면 눈치를 챌것인데, 호수는 층수 + 엘베부터 거리
이렇게 구성되어 있으니
호수 = (N나누기 H의 나머지) + (몫 + 1)
이 된다.
q = N // H # 몫
c = N % H # 나머지
print(c*100 + q+1)
주의 할 점은 나머지가 0일때, 즉 높이 H와 몇번째 손님 N이 같을때, 최상위 층에 손님이 머물게 되는데 이때 호수는 H층H호 이므로 나머지0을 H로 바꿔준다.
또한 나머지가 0일때, 손님은 꼭대기 층에 배정받으니 다음 줄로 넘어가지 않는다. 그래서 q-1을 해준다. (마지막에 q+1 해주어 print하기 때문에 미리 -1 하여 증가하지 않게 해주는 것)
if c == 0:
c = H
q -= 1
Solution
import sys
T = int(input())
for _ in range(0, T):
H, W, N = map(int, sys.stdin.readline().split())
# 방 호수는 "나머지 + 몫+1" 로 구성됨
q = N // H
c = N % H
# 맨 꼭대기 층일때, 나누어 떨어질때
if c == 0:
c = H
q -= 1
print(c*100 + q+1)
input 받을 때 sys.stdin.readline()
을 사용하면 시간을 좀 줄일 수 있다. 이에 대한 내용은
에 있다.
'Problem Solving > BOJ' 카테고리의 다른 글
BOJ 2798. 블랙잭 (Python) (0) | 2021.02.10 |
---|---|
BOJ 1259. 팰린드롬 수 (Python) (0) | 2021.02.10 |
BOJ 1085. 직사각형에서 탈출 (Python) (0) | 2021.02.09 |
BOJ 10818. 숫자의 합(Python) (0) | 2021.02.07 |
BOJ 11729. 숫자의 합(Python) (0) | 2021.02.07 |