본문 바로가기
알고리즘

leet code 20 -Valid Parentheses

by 자유코딩 2020. 8. 5.

Valid Parentheses

 

괄호를 검사하는 문제이다.

 

function isValid(s) {
  const splitStr = s.split('');
  if (splitStr[0] === ')' || splitStr[0] === '}' || splitStr[0] === ']') {
    return false;
  }
  const stack = [];

  for (const s of splitStr) {
    if (s === '(') stack.push(')');
    else if (s === '[') stack.push(']');
    else if (s === '{') stack.push('}');
    else if (stack.pop() !== s) return false;
  }
  return stack.length === 0 ? true : false;
}

 

맨처음 괄호가 ) } ] 로 나온다면 절대 맞을 수 없기 때문에 빠르게 리턴했다.

 

그 다음 ( { [ 로 시작하는 경우에서 ) } ] 를 스택에 넣는다.

if else if 로 한 이유는 if 문은 switch 문에서 break 문을 포함한 것 같은 효과를 낸다.

 

그래서 하나의 분기가 실행되면 다음 스텝으로 넘어간다.

 

() 의 경우

 

) 를 push 한다   -   s 가 맨처음 ( 일때

 

그 다음 괄호는 ) 이다. 그러면 if, else if 에 모두 해당되지 않는다.

 

스택에서 pop 한다. 

 

) 가 나온다 

)는 )과 같다.

 

스택에 하나있던 ) 가 pop 됐다.

 

스택이 비어있다. 

마지막으로 true 를 리턴한다.

 

 

댓글