[프로그래머스] 괄호 회전하기
2023. 2. 22. 15:17ㆍAlgorithm
괄호가 맞게 열고 닫힌 문자열인지 확인하는 문제이다.
"[({})]"이 입력값이라면, "({})][" 처럼 위치를 이동하며(원래위치로 돌아올 때 까지)
괄호가 제대로 열리고 닫힌 경우는 몇 번(횟수)인지 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;
}'Algorithm' 카테고리의 다른 글
| [프로그래머스] 완주하지 못한 선수 (1) | 2023.03.02 |
|---|---|
| 해시란? Map과 Object의 차이 (0) | 2023.03.01 |
| [프로그래머스] 직사각형 별찍기 (0) | 2023.02.22 |
| [프로그래머스] 점프와 순간 이동 (0) | 2023.02.20 |
| [프로그래머스] N개의 최소공배수 (0) | 2023.02.20 |