알고리즘 풀이/프로그래머스

[Level 2] 괄호 회전하기

mhko411 2021. 6. 15. 19:54
728x90

https://programmers.co.kr/learn/courses/30/lessons/76502?language=python3# 

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr


접근

python의 deque를 통해 괄호열을 괄호열의 길이만큼 회전하였다.

이후 스택을 활용하여 올바른 괄호열인지 판단하였다.

 

구현

- 먼저 입력받은 괄호열을 deque에 저장한다.

- 그리고 괄호열의 길이만큼 회전한다.

- 회전한 괄호열에 대해 올바른 괄호열인지 판단하기위해 스택을 활용한다.

- 여는 괄호일 때 스택에 push하고

- 닫는 괄호일 때는 스택의 top을 확인하여 짝이 맞을 때 pop한다.

- 이 과정에서 스택에 비어있는데 닫는 괄호가 나오면 탐색을 종료하고

- 탐색을 끝까지 했을 때 스택이 비어있다면 최종해를 증가한다.

from _collections import deque
def solution(ss):
    answer = 0
    dq = deque()
    for s in ss:
        dq.append(s)
    for _ in range(len(ss)):
        # 한 칸 회전
        s = dq.popleft()
        dq.append(s)
        # 스택 생성 -> 올바른 괄호 판단
        stack = []
        for s in dq:
            if s == '[' or s == '(' or s == '{':
                stack.append(s)
            else:
                if not stack:
                    break
                if s == ']' and stack[-1] == '[':
                    stack.pop()
                elif s == ')' and stack[-1] == '(':
                    stack.pop()
                elif s == '}' and stack[-1] == '{':
                    stack.pop()
                else:
                    break
        else:
            if not stack:
                answer += 1
    return answer

 

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 1] 키패드 누르기  (0) 2021.07.31
[Level 1] 숫자 문자열과 영단어  (0) 2021.07.31
[Level 3] 베스트 앨범  (0) 2021.06.07
[Level 2] 게임 맵 최단거리  (0) 2021.06.07
[Level 3] 섬 연결하기  (0) 2021.05.12