본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 10828/javascript] 스택

by tokkiC 2022. 8. 15.

자바스크립트에는 큐뿐 아니라 스택도 없다!

그나마 스택은 배열 뒤에서 pop 하면 되니 구현이 좀 더 쉽다만...

오늘 이유모를 수많은 에러들을 보며 몸비틀며 자바스크립트의 불편함에 머리가 터질지경이다

아이고 자바스크립트야 언제 친해질래...

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

// 전체 입력받기 및 처리
const array = require("fs").readFileSync("/dev/stdin").toString().split("\n");
// 처음 입력 값 제거
array.shift();

const stack = [];

// 객체를 만들어 객체의 메소드를 이용해서 입력이 메소드 명과 같으면
// 해당 명령을 실행하게한다
const fun = {
  pop: () => stack.pop() || -1,
  size: () => stack.length,
  empty: () => (stack[0] ? 0 : 1),
  top: () => stack[stack.length - 1] || -1,
  // push의 경우 push +" " + 숫자 이므로 공백 제거 후 [1]
  push: (item) => {
    stack.push(item.split(" ")[1]);
    return "";
  },
};

// 배열을 돌며 리턴받으면 그값을 result 에 더하고 개행해야 하므로
// 쌓아 누적하는 reduce 함수를 사용, 입력값을 객체의 속성인 메소드와 대조,
// 같다면 실행, push의 경우는 그대로 실행하면 안되니 예외로 처리한다
const result = array.reduce(
  (acc, v) => acc + (fun[v] ? `${fun[v]()}\n` : fun.push(v)),
  ""
);

console.log(result);

댓글