-
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
14 push 1 push 2 top size empty pop pop pop size empty pop push 3 empty top
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
2 2 0 2 1 -1 0 1 -1 0 3
에러
더보기자꾸 맨 마지막 값만 출력되고 나머지 값이 출력이 안됐다. . .
이유를 몰라서 1시간 동안 log 엄청 찍으면서 찾았는데. . .
변수에 top 들어간 것도 맞고, case 'top' 써둔 것도 맞는데 top으로 안들어가고 자꾸 디폴트로 들어감. . .
왜그러는지 찾으려고 변수 == 'top' 했더니 false 랜다. . . 왜 그러는지 진짜 이해가 안됐다. . .
진짜 끙끙 헤맸는데 알고보니 값을 받을 때 trim()을 안해서 그랬다. . .
trim()은 공백 지워주는 함수다. . . 그러니까 변수에 'top'이 들어간게 아니고 ' top'이나 'top ' 이렇게 들어갔겠지...?
trim() 하나로 에러 해결됐다. . . 여러분은 나같은 바보짓 하지 말기를. . .
+ .push() 나 .pop() 사용하지 않은 이유
처음엔 그렇게 했는데 그럼 백준에 제출시 시간초과 뜨더라
자바스크립트 내장메서드를 많이 사용하면 시간초과 뜸 ^ㅁ^
그래서 마지막에 한번만 썼다 헤헤. . . 결과는 맞았습니다!!
제출 코드
const fs = require("fs"); const readFileSyncAdd = "10828.txt"; const input = fs.readFileSync(readFileSyncAdd).toString().split('\n'); const stack = []; let res = ''; const len = input.shift(); for (let i = 0; i < len; i++) { const cmd = input[i].split(' ')[0].trim(); let ans = ''; switch(cmd) { case 'pop': if (stack.length == 0) { ans = -1; } else { ans = stack.splice(-1); } res += ans + ' '; break; case 'size': ans = stack.length; res += ans + ' '; break; case 'empty': if (stack.length == 0) { ans = 1; } else { ans = '0'; } res += ans + ' '; break; case 'top': if (stack.length == 0) { ans = -1; } else { ans = stack.slice(-1).join(' '); } res += ans + ' '; break; case 'push': const pushItem = input[i].split(' ')[1] stack.push(pushItem); break; } } console.log(res.split(' ').join('\n'));
'Baekjoon' 카테고리의 다른 글
11655. ROT13 (0) 2023.05.02 10845. 큐 (0) 2023.05.02 10820. 문자열 분석 (0) 2023.05.02 1157. 단어 공부 (0) 2023.04.09 9093. 단어 뒤집기 (0) 2023.04.09