괄호가 올바른 쌍이면 "YES", 그렇지 않으면 "NO"를 출력합니다.
예를 들어 ((()))()는 쌍이 올바르지만, ((())은 올바르지 않습니다.
const check = (str) => {
let stack = [], cnt = 0;
for(let x of str){
if(x === '('){
stack.push(x);
cnt++;
}
else {
stack.pop();
cnt--;
}
}
if(cnt) return 'NO';
return 'YES';
}
스택을 이용한 간단한 알고리즘이다.
'(' 차례에는 stack에 push를 해주고 cnt를 증가시킨다.
')'의 경우에는 pop을 해주고 cnt를 감소시킨다.
cnt가 0이 아닐경우에는 짝이 맞지않아서 스택에 '(' 또는 ')'가 한개 이상 있다는 것이다. => 'NO'를 반환한다.
그 나머지 경우에는 'YES'를 반환한다.
728x90