- 각각의 회전 케이스에 대해서 스택으로 괄호 검사를 하면 된다.
- {, [, (를 만나면 스택에 넣어주고, }, ], )를 만나면 스택에서 빼주면 되는데, 넣을때는 그냥 넣으면 되지만 뺄때는 스택이 비어 있는지, 뺀 괄호가 }, ], )에 매칭이 되는지를 검사해야 한다.
- for문을 빠져 나오고 나서는 괄호가 비어 있는지 확인해야 함. '{{{{{{' 같은 경우는 넣기만 하고 빠져나올 수 있음.
- 조건을 만족하는 모든 개수를 구하면 된다.
from collections import deque
def check(s):
st = deque()
for t in s:
if t in ['[', '(', '{']:
st.append(t)
else:
if len(st) == 0:
return False
temp = st.pop()
if (temp == '[' and t == ']') or (temp == '(' and t == ')') or (temp == '{' and t == '}'):
continue
return False
if st: # 스택에 차있으면 False임! 이거 처리 안해서 13번 통과 못했었음.
return False
return True
def solution(s):
answer = 0
for i in range(len(s)):
temp = s[i:] + s[:i] # 회전
if check(temp):
answer += 1
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 위장 (0) | 2021.06.26 |
---|---|
[ Lv 2 ] 큰 수 만들기 (0) | 2021.06.25 |
[ Lv 2 ] 배달 (0) | 2021.06.25 |
[ Lv 2 ] H-Index (0) | 2021.06.24 |
[ Lv 2 ] 조이스틱 (0) | 2021.06.24 |