문제
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
풀이
스택을 이용해서 풀면 될 것 같았다
문자열의 앞부분 부터 하나씩 스택에 넣으면서(push) 괄호가 유효한 쌍이 되면 그 쌍을 빼버리고(pop) 문자열이 끝났을 때 스택이 비어있게된다면 그 문자열은 VPS가 된다
VPS가 되지 않는 경우를 생각해보면
- 스택에 닫는 괄호 ')'가 남아있으면 그 문자열은 vps가 될 수 없다
- 문자열을 다 돌았을 때 스택에 문자가 남아있으면 그 문자열은 vps가 될 수 없다
두 가지만 생각하면 될 것 같다
코드
const input = `6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(`.split('\n').slice(1);
// const input = require("fs").readFileSync("/dev/stdin").toString().trim().split('\n').slice(1);
let answer = '';
for(let v of input){
answer += (checkVPS(v)? 'YES': 'NO') + '\n';
}
console.log(answer);
function checkVPS(ps){
const stack = [];
for(let v of ps){
if(v ===')') {
if(stack[stack.length-1] === '(') stack.pop();
else return false;
}
else if(v==='('){
stack.push(v);
}
}
return !stack.length;
}
'Algorithm > 문제' 카테고리의 다른 글
programmers. 수식 최대화 (0) | 2021.04.11 |
---|---|
baekjoon. 큐 2 (0) | 2021.03.08 |
baekjoon. 주유소 (0) | 2021.01.29 |
baekjoon. 평범한 배낭 (0) | 2021.01.27 |
baekjoon. LCS (0) | 2021.01.26 |