안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/76502
풀이
괄호가 () 같은 하나의 짝만 존재한다면... stack을 안써도 풀 수 있으나 괄호짝이 3개 이므로 stack을 이용해서 풉니다.
(), [], {} 괄호 짝 찾는 문제를 응용합니다. [참고]회전하는 건 i % len(s) 를 해줘서 새로운 문자열을 만들지 않고 원래 문자열의 인덱스를 변경해서 풀어줍니다.
예를 들어, 원래의 문자열이 "}]()[{" 이라면
1번 회전한 인덱스는 1 2 3 4 5 0
2번 회전한 인덱스는 2 3 4 5 0 1
....
5번 회전한 인덱스는 5 0 1 2 3 4
이렇게 되겠죠.
d = {"(": ")", "[": "]", "{": "}"}
def is_perfect(r, s):
stack = []
if len(s) % 2 == 1:
return False
for i in range(r, r + len(s)):
i = i % len(s)
if s[i] in d:
stack.append(s[i])
elif len(stack) == 0 or d[stack.pop()] != s[i]:
return False
return len(stack) == 0
def solution(s):
answer = 0
for r in range(len(s)):
if is_perfect(r, s):
answer += 1
return answer