본문 바로가기

Algorithm/프로그래머스

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

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

 

프로그래머스

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

programmers.co.kr

 

 

1. 해결방법

Queue와 Stack를 둘 다 사용해야 한다.
먼저 파이썬의 deque() 메서드와 rotate()메서드를 이용해서 for문을 이용해서 괄호를 한 칸씩 움직이는 로직을 구성한다.

그 다음 for문에서 stack 원리처럼 괄호를 하나하나 올바른 괄호인지 체크해야한다. 
(, [, { 가 첫 괄호이면 append하고 아니라면 그거는 올바른 괄호가 아닌 문자열로 반환을 한다.

pop()을 진행할 때는 pop()메서드를 적용시킨 문자와 검사중인 문자를 비교해서 문제가 없어야 올바른 괄호로 인식하는 로직이다.

 

 

2. 정답코드

def solution(s):
    from collections import deque
    s = deque(s)
    answer = 0
    for i in range(len(s)):
        s.rotate(-1)
        stack = []
        for ch in s:
            if ch == '(' or ch == '{' or ch == '[':
                stack.append(ch)
            else:
                if not stack:
                    break

                rear = stack.pop()
                if ch == ')' and rear != '(':
                    break
                elif ch == '}' and rear != '{':
                    break
                elif ch == ']' and rear != '[':
                    break
        
        else:
            if len(stack) == 0:
                answer += 1
        
    
    
    return answer