[JavaScript] 백준 10845 : 큐

2022. 7. 20. 23:38Algorithm/백준

class : 2

level : silver 4

문제 링크 :

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

My Solution

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim();
input = input.split('\n');
const N = parseInt(input.shift());
let answer = '', queue = [];
input.forEach((instruction)=>{
    if(instruction.includes("push"))
        queue.push(Number(instruction.split(/\D/g).filter(Number).map(Number)[0]));
    else if(instruction==='pop')
        answer+=((queue.length>0?queue.shift():-1)+'\n');
    else if(instruction==='front')
        answer+=((queue.length>0?queue[0]:-1)+'\n');
    else if(instruction==='back')
        answer+=((queue.length>0?queue[queue.length-1]:-1)+'\n');
    else if(instruction==='size')
        answer+=(queue.length+'\n');
    else
        answer+=((queue.length===0?1:0)+'\n');
})
console.log(answer.trim());

풀이방법

매번 console.log로 출력한다면 시간초과가 나올 수 있기에 answer에 모든 값을 담아 한번에 출력한다.

줄바꿈을 기준으로 입력값인 문자열을 배열로 나눠준다.

입력 배열의 각각 값을 명령어라는 instruction으로 명명하여 하나씩 if문을 이용하여 answer에 적절한 값을 넣는다.

split에 정규식을 이용할 수 있다.

/\D/g라는 정규식을 통해 숫자를 제외한 모든 것으로 분리시킨다. 이 때, 빈 문자열이 나오기에 filter에서 Number를 이용하여 걸러준다.

(빈 문자열잉 Number에 들어가면 NaN이 나오는 데 NaN은 boolean으로 바꾸면 false이다. 따라서 filter에서 걸러진다.)

또한 map 메서드를 이용하여 문자열을 숫자로 변환한다.

 

느낀점

어렵지는 않고 정규식을 사용하니 어렵지는 않았다.

정규식을 애용해야겠다.

I/O의 시간이 생각보다 길다는 것을 알 수 있다.