괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
• ()() 또는 (())() 는 올바른 괄호입니다.
• )()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
• 문자열 s의 길이 : 100,000 이하의 자연수
• 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
function solution(s){
let stack = [];
let array;
let i = 0;
let left = '(';
let right = ')';
array = s.split('');
while( i < array.length){
if( stack.length === 0 ){
if(array[i] !== right){
stack.push(array[i]);
}else{
return false;
}
}else{
if(stack[stack.length - 1] === left && array[i] === right ){
stack.pop();
}else{
stack.push(array[i]);
}
}
i++;
}
if( stack.length === 0){
return true;
}else{
return false;
}
}
1) stack이 비어 있을 때 ')'가 처음으로 들어오면 무조건 false를 반환한다.
2) stack 맨 위의 요소가 '('이고 stack에 넣으려는 요소가 ')'이면 넣지않고 stack에서 pop한다.
3) 그 이외엔 해당 array요소를 stack에 push
4) 마지막으로 stack이 비어 있으면 괄호가 정상적으로 매칭되었기 때문에 true, 남았으면 false
def solution(s):
stack = []
i = 0
left = "("
right = ")"
while i < len(s):
if len(stack) == 0:
if s[i] != right:
stack.append(s[i])
else:
return False
else:
if stack[len(stack) - 1] == left and s[i] == right:
stack.pop()
else:
stack.append(s[i])
i += 1
if len(stack) == 0:
return True
else:
return False