[프로그래머스] 괄호 회전하기

2023. 2. 22. 15:17Algorithm

괄호가 맞게 열고 닫힌 문자열인지 확인하는 문제이다.

"[({})]"이 입력값이라면, "({})][" 처럼 위치를 이동하며(원래위치로 돌아올 때 까지)

괄호가 제대로 열리고 닫힌 경우는 몇 번(횟수)인지 return

 

뒤 에서부터 비교한다고 하면

만약, 괄호가 "(" 다음 ")" 이라면  "({})" 순이라면 

1. ")"와 "}"는 짝이 맞지 않음 > ")"을 체크해야 할 리스트에 저장

2. "}"와 "{" 짝 맞음

3. "(" 짝 없음, 하지만 체크할 리스트에 있는 ")"와 짝맞음

와 같은 방식으로 해결하였다.

 

* dict에 "{", "(", "["가 key로 존재하지 않는 이유! 

  제대로 된 괄호라면 "}", ")", "]"가 먼저 나와서 check(체크해야 할 리스트)에 저장되어 있어야 함

 

 

function solution(s) {
  s = s.split("");
  let dict = { "}": "{", "]": "[", ")": "(" };
  var answer = 0;
  let nowturn = 0;

  while (nowturn < s.length) {
    console.log(s);
    let check = [];
    let num = s.length - 1;
    while (num >= 0) {
      if (s[num] === dict[s[num - 1]]) {
        num -= 2;
      } else if (s[num] === dict[check.at(-1)]) {
        check.pop();
        num -= 1;
      } else {
        check.push(s[num]);
        num -= 1;
      }
    }
    console.log("num", num, check.length);
    if (num === -1 && check.length === 0) {
      answer += 1;
    }
    s.unshift(s.pop());
    nowturn += 1;
  }

  return answer;
}