코딩테스트(JavaScript)/자료구조

백준- 10828번(스택) / 자바스크립트

paintover23 2023. 10. 1. 18:14
728x90

문제링크: https://www.acmicpc.net/problem/10828

const array = require('fs')
  .readFileSync('example.txt') // 제출시: '/dev/stdin'
  .toString()
  .trim()
  .split('\n'); // 문자 -> 배열화

const stack = [];
const result = [];

const length = Number(array.shift()); // 14 제거, 명령 모음만 남음

for (let i = 0; i < length; i++) {
  const commandArray = array[i].split(' ');
  const command = commandArray[0];

  switch (
    command // if - else if 조건문 대신 사용
  ) {
    case 'push': // 스택에 값 추가
      stack.push(Number(commandArray[1])); // 숫자로 변환하여 추가
      break;

    case 'pop': // 스택에서 제거하고 그 수를 출력, 들어있는 정수가 없으면 -1 출력
      result.push(stack.pop() || -1);
      break; // 조건이 맞아 break를 만나면 그 이후의 비교는 하지 않고 switch문 종료

    case 'size': // 스택 내 정수 개수 출력
      result.push(stack.length);
      break;

    case 'empty':
      result.push(stack.length === 0 ? 1 : 0);
      break;

    case 'top': // 스택의 가장 위(가장 마지막으로 들어온 값) 출력, 없는 경우 -1 출력
      result.push(stack[stack.length - 1] || -1);
      break;
  }
}

console.log(result.join('\n'));

풀이 포인트 및 배운점

1. stack 과 결과를 담는 result  배열을 따로 설정한다.

2. split(), join() 복습:

    - split() : 문자 -> 배열 (배열이니까 split 해서 넣는다고 기억)

    - join():  배열 -> 문자 (문자니까 크기를 축소해서 넣는다고 기억)

3. shift()(배열 메소드) :  배열의 첫번째 요소를 제거

4. input이 "push 2" 이런 형태로 들어오고 있기 때문에, array[i].split(" ") 을 통해 ["push", "2"] 이렇게 한번 더  쪼개고, 명령에 해당하는(commandArray[0]) 즉, push를 "command" 변수로 담았다.

5. switch - case 문 : if - else if 문을 대체할 수 있는 방법인데, 가독성이 더 좋다. 아래와 같은 형식을 갖는다.

switch(val) {
case "1":
// 실행문
break;

case "2":
// 실행문
break;

case "3":
// 실행문
break;
}

6. 출력값은 입력값과 동일한 형태로 출력되어야 한다. 따라서 result.join('\n')을 통해 한 줄씩 띄어진 형태로 출력한다.

728x90
반응형