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
반응형
'코딩테스트(JavaScript) > 자료구조' 카테고리의 다른 글
백준- 10845번(큐) / 자바스크립트 (2) | 2023.10.01 |
---|---|
백준-1847번(스택 수열) / 자바스크립트 (0) | 2023.10.01 |