[Python] 프로그래머스(Lv2) - 괄호 회전하기

Kerri·2021년 5월 4일
0

코테

목록 보기
43/67

안녕하세요 :)

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

풀이

괄호가 () 같은 하나의 짝만 존재한다면... stack을 안써도 풀 수 있으나 괄호짝이 3개 이므로 stack을 이용해서 풉니다.
(), [], {} 괄호 짝 찾는 문제를 응용합니다. [참고]

회전하는 건 i % len(s) 를 해줘서 새로운 문자열을 만들지 않고 원래 문자열의 인덱스를 변경해서 풀어줍니다.
예를 들어, 원래의 문자열이 "}]()[{" 이라면
1번 회전한 인덱스는 1 2 3 4 5 0
2번 회전한 인덱스는 2 3 4 5 0 1
....
5번 회전한 인덱스는 5 0 1 2 3 4
이렇게 되겠죠.

d = {"(": ")", "[": "]", "{": "}"}

def is_perfect(r, s):
    stack = []
    
    if len(s) % 2 == 1:
        return False
    
    for i in range(r, r + len(s)):
        i = i % len(s)
        if s[i] in d:
            stack.append(s[i])
        elif len(stack) == 0 or d[stack.pop()] != s[i]:
            return False
        
    return len(stack) == 0


def solution(s):
    answer = 0    
    
    for r in range(len(s)):     
        if is_perfect(r, s):        
            answer += 1
    
    return answer
profile
안녕하세요 !

0개의 댓글