프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
출력
프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
|예제 입력
2
6 12 10
30 50 72
|예제 출력
402
1203
제출
const input = (
process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `2
6 12 10
30 50 72`
).split("\n");
const T = input[0];
for (let i = 1; i <= T; i++) {
let [H, W, N] = input[i].trim().split(" ").map(Number);
let Y = N % H === 0 ? H : N % H;
let X = Math.ceil(N / H);
X < 10 ? console.log(`${Y}0${X}`) : console.log(`${Y}${X}`);
}
풀이과정
조건 (1). 방 번호는 YXX나 YYXX 형태
202호, 512호는 YXX 형태
1201호, 2310호는 YYXX 형태
조건 (2). 정문과 가까운 방을 선호하고, 걷는 거리가 같을 때는 아래층의 방을 선호한다.
102호 방보다는 301호 방을, 206호 방보다는 106호 방을 더 선호한다.
문제에서 주어진 예시와 같이 접근하면 로직을 쉽게 생각할 수 있다.
H = 6 일때, 10번째 손님은 402호에 배정해야한다
H를 10으로 나눈 나머지가 층수가 되고, 몫을 올림한 값이 호수가 된다.
H(6) / 10을 했을 때 1.6666...의 값이 나오게 되므로 나머지 손님을 배정하기 위해서는 하나의 호수를 더 사용해야한다.
따라서 몫을 호수로 하지 않고 올림을 해주어야한다.
여기서 주의할 점은 호수가 10보다 작을 땐 앞에 '0'을 추가로 덧붙여야 한다는 점!
Try 1 - 실패 )
const input = (
process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `2
6 12 10
30 50 72`
).split("\n");
const T = input[0];
for (let i = 1; i <= T; i++) {
let [H, W, N] = input[i].trim().split(" ").map(Number);
let Y = N % H === 0 ? H : N % H;
let X = N / H < 10 ? `0${Math.ceil(N / H)}` : Math.ceil(N / H);
console.log(`${Y}${X}`);
🔼 호수가 10보다 작을 경우를 비교했을 때 Math.ceil()을 사용한 값이 아닌 N / H로 비교했을 때, 오답처리가 되었다.
Try 2 - 정답 )
const input = (
process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `2
6 12 10
30 50 72`
).split("\n");
const T = input[0];
for (let i = 1; i <= T; i++) {
let [H, W, N] = input[i].trim().split(" ").map(Number);
let Y = N % H === 0 ? H : N % H;
let X = Math.ceil(N / H) < 10 ? `0${Math.ceil(N / H)}` : Math.ceil(N / H);
console.log(`${Y}${X}`);
}
🔼 삼항연산자의 조건문에 Math.ceil을 사용하니 정답이었다.
Final - 정답 )
const input = (
process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `2
6 12 10
30 50 72`
).split("\n");
const T = input[0];
for (let i = 1; i <= T; i++) {
let [H, W, N] = input[i].trim().split(" ").map(Number);
let Y = N % H === 0 ? H : N % H;
let X = Math.ceil(N / H);
X < 10 ? console.log(`${Y}0${X}`) : console.log(`${Y}${X}`);
}