Study/백준코테

7. 백준 코딩테스트 10250번 문제 python

코딩 잘 할거얌:) 2021. 9. 23. 20:50
반응형

이번에는 기본 수학 1에 관련된 문제에서 제목이 'ACM 호텔'로 되어있는 문제를 풀었다. 정답률이 34%대이다.


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

 

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net

 

호텔에서 사람을 배정하는 방식은 엘레베이터에서 가까운 호수에서 아래층부터 사람들을 배정하기 시작한다. 즉 엘리베이터를 바닥에 눕힌 형태로 본다면 우측 하단부터 좌측으로 하나씩 놓고 다 놓았다면 다시 우측에서부터 한 칸씩 쌓는다고 생각하면 편하다.

문제에서 방의 번호는 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)

 

한 번 틀린 이유는 YY에도 0을 붙였다가 틀렸다.

 

728x90