반응형
이번에는 기본 수학 1에 관련된 문제에서 제목이 'ACM 호텔'로 되어있는 문제를 풀었다. 정답률이 34%대이다.
https://www.acmicpc.net/problem/10250
호텔에서 사람을 배정하는 방식은 엘레베이터에서 가까운 호수에서 아래층부터 사람들을 배정하기 시작한다. 즉 엘리베이터를 바닥에 눕힌 형태로 본다면 우측 하단부터 좌측으로 하나씩 놓고 다 놓았다면 다시 우측에서부터 한 칸씩 쌓는다고 생각하면 편하다.
문제에서 방의 번호는 YXX 혹은 YYXX로 나뉜다고 나뉜다고 한다. YY와 XX를 층수, 번호로 나누어서 생각하고 호텔의 층수, 한 층의 방 수에 대한 관계 식을 생성해 보자.
N번째 배정받는 손님의 층수는 Y, 번호는 X 그리고 호텔의 전체 층 수는 H, 한 층의 전체 방 수는 W라고 한다면, X와 Y의 관계식은 다음과 같다. 단 X와 Y는 자연수이다.
$$X = N/H +1$$
첫 시작은 1층에서 시작하므로 +1을 해준다.
$$Y = N mod H$$
a mod b는 a를 b로 나눈 나머지를 말한다.
이렇게 풀면 오류가 한 가지 있다. 만약에 N과 H가 배수의 관계에 있다면, Y가 0이 나오기 때문이다. 예를 들어 호텔이 5층이라면 5번째 손님과 10번째 손님은 5층에 배정이 되어야 한다. 이 경우만 따로 조건문 걸어서 처리해준다.
그리고 YXX 또는 YYXX이기 때문에, X가 한자리여도 두 자리가 출력되게 0을 붙여야한다.
코딩해보도록 하자.
#테스트 횟수
test_count = int(input())
#테스트의 결과 저장하는 리스트
result_list = []
#테스트 횟수만큼 반복한다.
for i in range(0, test_count):
#받아온 H W N
receive_input = input().split()
height = int(receive_input[0])
width = int(receive_input[1])
customer = int(receive_input[2])
#YY와 XX를 받는 변수 선언
room_height = ""
room_number = ""
#N과 H가 배수관계에 있는 경우
if customer % height == 0:
room_height = f"{height}"
room_number = f"{(customer // height)}"
#아닌 경우
else:
room_height = f"{customer % height}"
room_number = f"{(customer // height) + 1}"
#만약 방 번호가 한 자리수로 나온다면, 0을 추가해준다.
if int(room_number) < 10:
room_number = "0" + room_number
#결과값 저장
result_list.append(room_height + room_number)
#결과 출력
for i in result_list:
print(i)
728x90
'Study > 백준코테' 카테고리의 다른 글
9. 백준 코딩테스트 4796번 문제 python (0) | 2022.01.25 |
---|---|
8. 백준 코딩테스트 2798번 문제 python (0) | 2022.01.12 |
6. 백준 코딩테스트 2839번 문제 python (0) | 2021.09.23 |
5. 백준 코딩테스트 2869번 문제 python (0) | 2021.09.18 |
4. 백준 코딩테스트 1712번 문제 python (0) | 2021.09.16 |