- 각각의 회전 케이스에 대해서 스택으로 괄호 검사를 하면 된다.

- {, [, (를 만나면 스택에 넣어주고, }, ], )를 만나면 스택에서 빼주면 되는데, 넣을때는 그냥 넣으면 되지만 뺄때는 스택이 비어 있는지, 뺀 괄호가 }, ], )에 매칭이 되는지를 검사해야 한다.

- 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

+ Recent posts