괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
첫 번째 줄에 YES, NO를 출력한다.
(()(()))(()
NO
문제를 정확히 이해하지 못했다.
function solution(s){
let answer="YES";
stack=[];
for (let x of s) {
if ( x === '(' ) stack.push(x)
else if ( x === ')' ) stack.pop(x)
console.log(stack)
if (stack.length > 0) answer="NO"
}
return answer;
}
// let a="(()(()))(()";
let a="(())()";
console.log(solution(a));
배열의 push와 pop을 이용
'(' : push
')' : pop
올바른 괄호는 stack에 아무것도 남지 않는다.
-> 여는 괄호와 닫는 괄호의 쌍과 방향이 맞기 때문에
스택 상단에 있는 여는 괄호는
현재 닫는 괄호의 짝이다.
(())()
(()) )(
function solution(s){
let answer="YES";
stack=[];
for(let x of s){
if(x==='(') stack.push(x);
else{
if(stack.length===0) return "NO"; // 닫는괄호 상황
stack.pop();
}
}
if(stack.length>0) return "NO"; // 여는괄호가 많은 상황
return answer;
}
let a="(()(()))(()";
console.log(solution(a));
abc