(백준) 큐

hwisaac·2024년 11월 10일
0

코테TIL

목록 보기
11/20

문제링크

https://www.acmicpc.net/submit/10845/50614846

풀이

const fs = require("fs");
let input = fs.readFileSync(0).toString().split('\n');

N = Number(input[0]);
const x = input.slice(1);
const lis = [];

ans = ""

const calc = (el, list) =>{
  let x = el[1];
  switch (el[0]){
    case 'push':
      list.push(x);
      break;
    case 'pop':
      if (0 === list.length ){ 
      ans += "-1\n"
      }else{
        ans += `${list.shift(x)}\n`
      }
      break;
    case 'size':
      ans+= `${list.length}\n`
      break;
    case 'empty':
      if (list.length === 0){
        ans += "1\n"
      }else{
        ans += "0\n"
      }
      break;
    case 'front':
      if (list.length === 0){
        ans += "-1\n"
      }else{
        ans += `${list[0]}\n`
      }
      break;
    case 'back':
      if (list.length === 0){
        ans += '-1\n'
      }else{
        ans += `${list[list.length-1]}\n`
      }
      break;
  }
};
x.forEach( (el, i) =>
  {
    calc(el.split(' '), lis); 
  }
);
console.log(ans);

TIL

문제 요약

  • 큐를 구현하고 다양한 명령어(push, pop, size, empty, front, back)에 대한 동작을 수행해야 한다.
  • 명령어에 따른 결과를 순서대로 출력하도록 요구된다.

문제 해결 방법

  1. 자료 구조 선택: 큐를 배열로 구현하여 기본적인 push, pop 연산을 처리.
  2. 명령어 처리: 각 명령어별로 switch 문을 통해 적절한 동작을 수행하도록 calc 함수를 작성.
  3. 출력 최적화: 매번 console.log()로 출력하는 대신, 결과를 문자열에 누적하여 한 번에 출력.
  4. 케이스별 처리: empty, size, front, back 명령에 대해 큐가 비어있는 경우를 별도로 처리하여 조건에 맞는 값을 출력.

주요 코드 설명

  • calc 함수: 각 명령어를 받아 적절한 동작을 수행하고, 결과를 ans 문자열에 누적.
  • x.forEach: 입력 명령어를 순차적으로 받아 calc 함수를 호출.

배운 점 및 개선할 점

  • 입출력 최적화: 많은 출력이 필요할 경우 매번 console.log()를 호출하는 것보다 결과를 누적 출력하는 것이 효율적이다.
  • 큐 연산 최적화: 배열의 shift 연산은 느릴 수 있으므로 실제 프로덕션 코드에서는 효율적으로 처리할 수 있는 자료 구조를 고려해야 한다.

0개의 댓글