[백준] JavaScript 10250번 ACM 호텔
Question
input
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
output
프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
example
2
6 12 10
30 50 72
402
1203
Solution
console.log(require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').splice(1).map(e=>{
const [h,w,n]=e.split(' ');
const floor=n%h;
const room=String(Math.ceil(n/h)).padStart(2,'0');
return `${floor!==0?floor:h}${room}`
}).join('\n'));
What I learned
처음 호수를 표현할 때 1호 => 01호, 12호 => 12호 이런식으로 표현하기 위해 호수를 0.01을 곱해 소수로 만든 후 소수점 부분만 취하는 방식으로 접근했었다.
const room=String(((Math.ceil(n/h))*0.01).toFixed(2)).split('.')[1];
하지만 이 문제처럼 원하는 자리수에 경우에 따라 문자를 더해주는 방식은 자주 쓰이는 데, 그 때마다 이렇게 곱하고 나누고 하는 게 최선일까 생각돼 좀더 검색해보았고, 그 결과 아주 유용한 문자열 메소드를 찾을 수 있었다. 바로 padStart와 padEnd이다.
str.padStart(targetLength,[,padString])
padStart() 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다. 채워넣기는 대상 문자열의 시작(좌측)부터 적용된다.
- targetLength: 목표 문자열 길이. 현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환.
- padString: 현재 문자열에 채워넣을 다른 문자열. 문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부를 잘라서 넣음. 기본값은 "".
'abc'.padStart(10); // " abc"
'abc'.padStart(10, "foo"); // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0"); // "00000abc"
'abc'.padStart(1); // "abc"
str.padEnd(targetLength,[,padString])
padStart와 동일한데 padEnd는 대상 문자열의 우측(끝)부터 채워넣는다는 차이가 있다.
Author And Source
이 문제에 관하여([백준] JavaScript 10250번 ACM 호텔), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wiostz98kr/백준-JavaScript-10250번-ACM-호텔저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)