[Baekjoon] 10250번 ACM 호텔
ACM 호텔
시간 제한 | 메모리 제한 | 정답 비율 |
---|---|---|
1 초 | 256 MB | 33.585% |
문제
ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.
문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.
그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림
입력
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
출력
프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
예제 입력 1
2
6 12 10
30 50 72
예제 출력 1
402
1203
풀이
이 문제는 백준 단계별 풀이의 기본수학 1 카테고리에 있는 문제로서 수학, 구현, 사칙연산의 알고리즘을 사용하여 푸는 문제입니다.
저는 몇 번째 손님인지를 나타내는 ‘n’을 방의 층수를 의미하는 ‘h’로 나눗셈을 진행하면 결과로 나오는 몫과 나머지가 해당 손님의 방의 호수와 층수를 모두 구할 수 있을 것이라 생각하였습니다.
test_case = int(input())
for i in range(test_case):
input_ = input()
h,w,n = map(int,input_.split())
mok = n // h
rest = n % h
if rest == 0:
print(100*h+mok)
else:
mok += 1
print(100*rest+mok)
-
먼저 몇 번의 case를 확인할 지를 받아야 하기 때문에 test_case를 정수형태로 입력 받아 이 수많큼 for문으로 반복합니다.
-
반복문 안의 내용
- 입력을 띄어쓰기를 기준으로 세 정수를 받는다. 이를 띄어쓰기를 기준으로 다시 나누어 정수화 과정을 진행하여 각각의 변수 h,w,n(순서대로 층수, 호수, 손님 번호)에 저장합니다.
- 손님의 번호와 건물의 층 수를 나누었을 때 딱 떨어지는 경우는 건물의 꼭대기 임을 쉽게 확인할 수 있었고 그렇지 않은 경우에는 몫(호수)이 원하는 값보다 1만큼 더 적기 때문에 이를 따로 if문으로 구별하였습니다.
- 나눈 몫과 나머지를 변수 mok, rest에 각각 저장하였습니다.
- 만약 나머지가 0이라면 꼭대기층에 있는 것이므로 높이는 입력받은 높이 그대로를 사용하고 호수는 몫을 그대로 사용하여 값을 산출할 수 있었습니다.
- 만약 나머지가 값이 존재한다면 나눈 몫에 1을 더해준 것이 호수가 되고 나머지가 그대로 층수가 되어 값을 산출할 수 있었습니다.
댓글남기기