https://programmers.co.kr/learn/courses/30/lessons/76502
1️⃣ 문자열을 deque에 넣은 다음 한 회차씩 수행할 때 마다 문자열을 뒤로 미룸
2️⃣ 올바른 문자열인지 파악할 때 스택 구조를 이용하고 현재 들어가는 문자가 열린 괄호면 스택에 넣어주고 닫히는 괄호이면 스택의 맨 위의 괄호가 매칭되는 괄호이면 스택의 맨 위 열린 괄호를 빼주고 그 이외의 경우(매칭이 안되거나 스택이 비어있는 경우)올바른 문자열이라고 판단을 해 주지 않음
3️⃣ 조사 후 스택 길이가 0이고 2번 조건을 만족하는 문자열에 대하여 정답 갯수를 세어준다.
from collections import deque
def solution(s):
answer = 0
pair_dict = {'[': ']', '{' : '}', '(': ')'}
open_chr = ['[', '{', '(']
close_chr = [']', '}', ')']
dq = deque(s)
for i in range(len(dq)):
flag = True
# 문자열 맞춰줌
temp = dq.popleft()
dq.append(temp)
check = list(dq)
s = []
for j in check:
# 스택이 비어 있을 때
if len(s) == 0:
if j in open_chr:
s.append(j)
continue
else:
flag = False
break
if pair_dict[s[-1]] == j:
s.pop()
continue
elif j in open_chr:
s.append(j)
continue
else:
flag = False
break
if len(s) == 0 and flag:
answer += 1
return answer