입력 데이터는 표준 입력을 사용한다.
입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
NO
NO
YES
NO
YES
NO
① 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 같아야 한다.
② 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다.
③ 괄호 쌍이 사로 교차하면 안된다.
'use strict';
class Stack{
constructor(){
this.store = [];
}
push(item){
this.store.push(item);
}
pop() {
return this.store.pop();
}
isEmpty() {
if (this.store.length == 0)
return true;
else return false;
}
}
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
function ParenCheck(tmp){
const stack = new Stack();
let item, pre;
for (let i = 0; i < tmp.length; ++i){
item = tmp[i]
if (item == '(') stack.push(item);
else if (item == ')'){
if (stack.isEmpty()) return false; // 조건 2
pre = stack.pop();
if (item == ')' && pre != '(')
return false; // 조건 3
}
}
if (!stack.isEmpty()) return false; // 조건 1
return true;
}
{
let tmp;
for (let i = 1; i < Number(input[0]) + 1; ++i){
tmp = input[i];
if (ParenCheck(tmp))
console.log('YES');
else console.log('NO');
}
}
2021-01-09