나의 풀이
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const allLeng = Number(input[0])
const findRoomNum = (arrs) => {
const [floornum, roomnum, clientnum] = arrs.split(' ').map(ele=>Number(ele))
let cnt = 0
for(let i=1; i<=roomnum; i++){
for(let j=1; j<=floornum; j++){
cnt++
if(cnt===clientnum){
console.log(Number(String(j)+String(i<10?"0"+String(i):i)))
break;
}}
if(cnt===clientnum) break
}}
for(let k=1; k<=allLeng; k++) findRoomNum(input[k]);
//220ms
나는 이중반복문을 돌려서 cnt와 clientnum이 일치하면 i와 j를 string으로 합친 결과를 출력하였는데,
다른 사람들의 풀이법을 보니 수학공식을 활용했었고, 그 방법이 확실히 성능이 좋더라😳😳
다른 방법
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
function Checkin(Height, Number){
const H = parseInt(Height)
let N = parseInt(Number)
let W = 0
while (N > 0) {
N -= H
W++
}
N += H
console.log(N+"" + (W<10 ? "0" + W : W))
}
for(i= 1; i <= input[0]; i++){
const Case = input[i].split(' ').map(ele=>parseInt(ele));
Checkin(Case[0], Case[2])
}
N -= H을 N이 0이 될 때까지 반복하는 동안 W를 카운팅하면 손님이 머무르게 될 그 층의 룸넘버를 알 수 있습니다.
그리고 N += H를 하면 N이 머무르게 될 층넘버를 알 수 있습니다.이 방법을 이용하니 1.5배 성능이 개선된 것을 볼 수 있었습니다!
'📝 꾸준함이 무기 > Algorithm' 카테고리의 다른 글
[백준/Node.js] 4948 베르트랑 공준 (0) | 2021.06.16 |
---|---|
[백준/Node.js] 2941 크로아티아 알파벳 (0) | 2021.06.15 |
[CT] 가장 짧은 문자거리 (0) | 2021.05.09 |
[CT] 격자판 최대합 (0) | 2021.05.06 |
[CT] 등수구하기 (임의의 배열 만들기(초기화포함)) (0) | 2021.05.01 |