애플파이썬

[프로그래머스] Lv.2 괄호 회전하기 (파이썬) 본문

파이썬/프로그래머스

[프로그래머스] Lv.2 괄호 회전하기 (파이썬)

유진파이 2025. 3. 31. 17:23

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 설명

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
  • 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {}  ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.


나의 풀이

def solution(s):
    answer = 0
    for _ in range(len(s)):
        s = s[1:] + s[0]
        stack = []
        for ch in s:
            if ch in '({[':
                stack.append(ch)
            else:
                if not stack:
                    break
                top = stack.pop()
                if ch == ')' and top != '(':
                    break
                elif ch == '}' and top != '{':
                    break
                elif ch == ']' and top != '[':
                    break
        else:  #boolean 안쓰려다 보니 for-else 문 사용 -> break 없이 빠져나왔을 때 돌아감.
            if not stack:
                answer += 1
                    
    return answer
  • stack 으로 해결할 수 있는 문제!
  • {[(으로 시작할 때는 stack 에 push 해주고,
  • 아닐 경우에는 1) stack 이 비어있는데 }])로 시작하면 break
  • 2) stack에서 가장 위에 값 뽑아왔는데 짝이 안맞으면 break
  • 만약 break 없이 무사히 다 돌아갔고, stack이 비어있으면 answer += 1
  • for - else 문에 대해서 배웠습니당 : for 이 break 안하고 다 돌아갔으면 else문 실행