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 |