[javascript] 백준 1966번 프린터 큐

bjyyyyy·2022년 11월 8일
0

문제보기

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs
    .readFileSync(filePath)
    .toString()
    .trim()
    .split("\n")
    .map((item) => item.split(" ").map((item) => +item));

let num = input.shift();
let answer = [];
for (let i = 0; i < num; i++) {
    const [N, M] = input.shift();
    const docs = input.shift();
    const id = [];
    for (let i = 1; i <= N; i++) {
        id.push(i);
    }
    const target = id[M];
    let result = 1;
    while (docs.length > 0) {
        let curDoc = docs.shift();
        let trueCheck = docs.filter((ele) => ele > curDoc);
        if (trueCheck.length === 0) { // 맨앞에서 뽑은 값보다 큰값이 없으면
            if (id[0] === target) { // 문서들의 고유 id 맨앞에 있는값이 target과 같으면
                answer.push(result);
                break;
            }
            id.shift();
            result++;
        } else {
            docs.push(curDoc);
            id.push(id.shift());
        }
    }
}

console.log(answer.join("\n").trim());

let trueCheck = docs.filter((ele) => ele > curDoc); 이부분을
let trueCheck = docs.some((ele) => ele > curDoc);로 했었는데 런타임에러가 계속 발생했다..
이유는 docs가 빈배열일경우 ele는 undefined고 1 과 undefined를 비교하니 무조건 false가 나와서 발생했던 문제였다
메소드 사용법 및 자바스크립트의 특징에대해 좀 더 공부를 해야겠다는 생각이 들었다.

0개의 댓글