PS알못 OrbitHv의 PS logo PS알못 OrbitHv의 PS

태그:

8. 기본 수학 1 CLASS 2 ESSENTIAL

H층이 있고, 각 층마다 W개의 호실이 있는 호텔에 N번째로 들어오는 사람이 들어올 때, 어느 호실에 묵게 되는지 출력하는 문제입니다. 문제의 조건을 분석해보면 먼저 사람이 빈 방이 존재하는 호수(층 제외)를 찾고, 그 중 가장 낮은 층에 있는 호실을 체크인하는 순서대로 배정합니다. 즉, 처음으로 들어오는 사람은 101호, 그 다음은 201호, …, 해서 H01호까지 찬 다음에는 102호가 됩니다. 생각해보면 나머지 연산과 나눗셈으로 쉽게 구할 수 있을 것 같습니다. 호텔을 표로 표현해보면 아래처럼 될 것입니다.

H 2H 3H WH
 
3 H+3 2H+3 (W-1)H+3
2 H+2 2H+2 (W-1)H+2
1 H+1 2H+1 (W-1)H+1

배치를 보면 N에 적절한 조치를 취한 후 H로 나눈 몫과 나머지를 이용하면 쉽게 풀 수 있을 것 같습니다. 위 표의 각 수를 1씩 뺴보겠습니다.

H-1 2H-1 3H-1 WH-1
 
2 H+2 2H+2 (W-1)H+2
1 H+1 2H+1 (W-1)H+1
0 H 2H (W-1)H

아래에서 첫 번째 행은 H로 나눈 나머지가 0입니다. 아래에서 두 번째 행은 나머지가 1입니다. 그런 식으로 아래에서 x번째 행은 나머지가 x-1이 됩니다. 또한 첫 번째 열은 H로 나눈 몫이 0입니다. 두 번째 열은 1이고요. 이런 식으로 y번째 열은 몫이 y-1입니다. 그런데 아래에서 x번째 행은 x층을 의미하고 y번째 열은 y호를 의미합니다. 그렇다면 이 몫과 나머지를 1씩 더한 값으로 방 호수를 만들 수 있지 않을까요? 입력으로 주어진 값에서 1을 뺀 후 H로 나눈 나머지와 몫을 구하고, 여기에 1씩 더해서 호수를 만들면 답을 구할 수 있을 것입니다.

여기서 유의해야 할 점은 층은 format 기준이 없지만 호는 항상 두 글자로 표시해야 한다는 점입니다. format에 신경써주세요.

소스 코드

언어 코드 시간
Python 3 코드(Github) / 코드(백준) 2020-03-26 14:01:53