728x90
2가지 함수를 활용해서 해결하였다.
1. 올바른 괄호열인지 확인하는 함수
스택 구조를 활용해서 {[( 와 같은 시작하는 괄호가 있으면 넣어주고 끝나는 괄호면 가장 최근에 들어갔던 괄호와 타입이 맞는지 체크한다. 문자를 다 돌았을때 스택에 아무것도 없다면 올바른 괄호열이다.
2. 회전하는 함수
문자열의 맨 첫문자를 뒤에 붙이면 왼쪽으로 1회 회전이 가능하다.
3. 회전 => 올바른 괄호인지 체크 후 카운트
function solution(s) {
const obj= {
'}' : '{',
']' : '[',
')' : '(',
}
const isCorrectBracket = (str) => {
const stk = []
for (const c of str) {
if ('{[('.includes(c)) stk.push(c)
else if (obj[c]!== stk.pop()) return false
}
return stk.length ? false :true
}
const rotate = (str) => str.substring(1) + str[0]
let ret = 0
for (let i = 0 ; i < s.length ; i++){
s = rotate(s)
ret += isCorrectBracket(s) ? 1 : 0
}
return ret
}
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 메뉴 리뉴얼 (0) | 2023.06.16 |
---|---|
[JS] 순위 검색 (0) | 2023.06.16 |
[JS] 행렬 테두리 회전하기 (0) | 2023.06.14 |
[JS] 두개 이하로 다른 비트 (0) | 2023.06.13 |
[JS] 거리두기 확인하기 (0) | 2023.06.13 |