https://www.acmicpc.net/problem/9012
- 사용언어 : node.js
- 알고리즘 : 자료구조, 문자열, 스택
- Solved.ac Tier : Silver IV
node.js 코드
1. 문제 정리
분명 학교 교수님이 1학년 2학기 중간고사때 내줬던 문제와 매우 유사한 문제이다.. c언어로 왜 이걸 구현하라고 했는지, 자료구조 공부를 조금 해보니 알 것 같다. stack을 알고나니 그냥 대충 몇코드 뚝딱 하니 되지만, c언어로 하나하나 코딩하기는 매우 귀찮았었지..
문제를 살펴보자. 그냥 괄호 짝이 맞으면 'YES' 아니면 'NO'를 출력 하면 되는 간단한 문제이다.
스택으로 push하고 pop이 불가능 할 때 까지 반복문 돌려주면 되지 않을까? 찾아봤다.
for(let i = 1; i <= parseInt(inputs[0]); i++){
const stack = []
let result = true
for(let j = 0; j< inputs[i].length; j++){
if(inputs[i][j] === '(')
stack.push(inputs[i][j])
else{
if(!stack.pop()){
result = false
}
}
}
if(stack.length !== 0){
result = false
}
if(result == false)
console.log('NO')
else
console.log('YES')
}
요렇게 해결하면 되지 않을까? 생각했는데 그냥 안되더라... else문으로 ')' 만 잡아줘야 해결이 가능했다.. 아직도 뭐가 문제인지 모르겠는데 아시는 분은 댓글 좀... 부탁드려요!!
아마 내가 모르는 js 특징중에 또 한 가지가 아닐까 생각하는데.. 뭐 그렇겠지 ㅋ;
2. 완성 코드
let inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); // /dev/stdin
for(let i = 1; i <= parseInt(inputs[0]); i++){
const stack = []
let result = true
for(let j = 0; j< inputs[i].length; j++){
if(inputs[i][j] === '(')
stack.push(inputs[i][j])
else if (inputs[i][j] === ')'){
if(!stack.pop()){
result = false
}
}
}
if(stack.length !== 0){
result = false
}
if(result == false)
console.log('NO')
else
console.log('YES')
}
'백준 알고리즘 > Lang-node.js' 카테고리의 다른 글
[백준/node.js] 24262번 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2022.01.25 |
---|---|
[백준/node.js] 23803번 골뱅이찍기 - ㄴ (0) | 2022.01.20 |
[백준/node.js] 23802번 골뱅이 찍기 - 뒤집힌 ㄱ (0) | 2022.01.19 |
[백준/node.js] 23971번 ZOAC 4 (0) | 2022.01.08 |
[백준/node.js] 2523번 별찍기 - 13 (0) | 2022.01.08 |