본문 바로가기
코딩테스트/Python

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

by 포뇨j 2023. 12. 6.

https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(s):
    answer = 0
    
    for i in range(len(s)):
        arr = []
        s = s[1:] + s[0] #왼쪽으로 한 칸씩 이동
        
        if s[0] == '[' or s[0] == '(' or s[0] == '{':
            for item in s:
                if len(arr) == 0:
                    arr.append(item)
                else:
                    if arr[-1] == '[' and item == ']':
                        arr.pop()
                    elif arr[-1] == '(' and item == ')':
                        arr.pop()
                    elif arr[-1] == '{' and item == '}':
                        arr.pop()
                    else:
                        arr.append(item)
            if len(arr) == 0:
                answer += 1
    return answer

 

스택에 괄호를 하나씩 추가하고, 이전 괄호와 추가할 괄호의 쌍이 맞으면 pop하여 스택의 길이를 확인하는 방식으로 풀었다.

스택의 길이가 0이 아닐 경우 쌍이 맞지 않는 괄호가 존재하는 것이다.

 

반복을 줄이고자 if s[0] == '[' or s[0] == '(' or s[0] == '{': 행을 통해 여는 괄호인 경우만 계산하도록 했는데, 다른 사람의 풀이를 보면 굳이 없어도 될 것 같기도 하다.