[프로그래머스] 괄호 회전하기

ganta·2021년 6월 4일
0

알고리즘 문제해결

목록 보기
23/24
post-thumbnail

✔️ 문제 링크

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
profile
한걸음씩 꾸준히

0개의 댓글