[백준] JavaScript 10250번 ACM 호텔

8457 단어 bojboj

Question

[백준] JavaScript 10250번 ACM 호텔

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는 대상 문자열의 우측(끝)부터 채워넣는다는 차이가 있다.

좋은 웹페이지 즐겨찾기