코드노트

leetcode 자바스크립트 문제 풀이 Valid Parentheses 유효한 괄호 본문

Code note/자바스크립트 알고리즘 문제풀이

leetcode 자바스크립트 문제 풀이 Valid Parentheses 유효한 괄호

코드노트 2022. 9. 9. 12:59

 Valid Parentheses 유효한 괄호

더보기

문제설명

'(', ')', '{', '}', '[' 및 ']' 문자만 포함하는 문자열이 주어지면 입력 문자열이 유효한지 확인합니다.

다음과 같은 경우 입력 문자열이 유효합니다.

열린 브래킷은 동일한 유형의 브래킷으로 닫아야 합니다.

열린 브래킷은 올바른 순서로 닫아야 합니다.

모든 닫기 대괄호에는 동일한 유형의 해당 여는 대괄호가 있습니다.

- 이번 문제는 stack을 활용하는 문제이다.

- 간단하게 말하면 입력값을 넣어놓고 입력값에 맞는 값들을 빼면서 length를 0으로 만들어내면 된다.

 

 

var isValid = function (s) {
  const stack = [];

  for (let i = 0; i < s.length; i++) {
    if (s[i] === "{" || s[i] === "[" || s[i] === "(") {
      stack.push(s[i]);
    } else {
      const lastChar = stack.pop();
      if (
        (s[i] === "}" && lastChar !== "{") ||
        (s[i] === "]" && lastChar !== "[") ||
        (s[i] === ")" && lastChar !== "(")
      ) {
        return false;
      }
    }
  }
  return stack.length === 0;
};

- 문자의  length만큼 반복문을 돌리면서 괄호들과 같으면 stack 배열에 넣어준다.

그게 아니면 lastChar변수에 담아준다.

- 그리고 들어오는 값들이 닫히는 값인지 확인하여 맞으면 빼준다.

*다른문자일수도 있기 때문에 조건에서 두가지를 확인해줘야한다.

- 마지막으로 length 값이 0이면 true를 반환한다.

 

 

다른사람풀이를 보면 배열에 넣어주고 괄호를 포함하고 있는지를 비교하기도 하였다.

나는 그냥 배열을 만들지 않고 직관적으로 문제를 풀어보았다.