from collections import deque
def solution(s):
answer = 0
def rotateString(s, x):
if x == 0: return s
else: return s[1:] + s[0]
def rightPair(ch):
if ch == ')': return '('
elif ch ==']': return '['
elif ch == '}': return '{'
def isRightString(s):
stack = deque()
for i in range(len(s)):
if s[i] == '[' or s[i] == '(' or s[i] =='{':
stack.append(s[i])
else:
if stack and (stack[-1] == rightPair(s[i])):
stack.pop()
else: return False
if stack: return False #len(s) == 1인걸 걸러내기 위함
else: return True
for i in range(len(s)):
s = rotateString(s, i)
if isRightString(s): answer += 1
return answer
딱히 어려운 점이 없었다. 괄호 회전하는건 string slicing을 이용해 구현했고, 올바른 괄호 문자열을 찾는 건 늘 그랬듯이 스택을 사용하여 구현해줬다. isRightString에서 stack이 비어있지 아닌지를 판단하는 건 "("과 같이 문자열의 길이가 1인 경우를 대비하여 만들어주었다.