DevKim

[Python] 프로그래머스 LV.02 - 괄호 회전 본문

알고리즘 PS

[Python] 프로그래머스 LV.02 - 괄호 회전

on_doing 2021. 6. 30. 09:27
728x90

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

 

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

 

programmers.co.kr

Spring 공부한다고 잠시 놓고 있었던 1일 1 PS를 다시 시작했다.

그저께 부터 시작이었는데.. 삼성 기출을 3번은 돌리고 싶어서 이전에 풀지 않았던 문제들 풀려고 했다가

머리 털 다 뽑히고 한문제 겨우 풀어냈다.. 하하!

삼성 기출은 정말 어렵다 ㅠㅠ 한달 뒤에 나는 잘 풀어낼 수 있는 실력을 가졌으면 하는 바람..

 

그래서 오늘은 프로그래머스 2단계에 새로운 문제들이 추가됐길래 가볍게 풀어보았다.

 

[ 알고리즘 ]

단순구현

 

[ 자료구조 ]

큐,스택

 

[문제 접근]

말은 뭔가 복잡하게 써놨지만, 그냥 단순히 모두가 알고있는 올바른 괄호 찾기 문제의 응용버전이다.

주의해야할 점은 괄호의 종류가 3개이므로 3번을 체크해주어야한다.

좀 더 편리하게 비교하기 위해서 dictionary로 열고 닫는 괄호들을 매핑해주었다.

 

조건에 부합하면 괄호 비교를 해주고 부합하지 않으면 count 하지 않고 popleft해서 append로 뒤쪽에 붙여주었다.

 

[코드]

from collections import deque
import copy

def solution(s):
    answer = 0
    List = deque(list(s))
    dic = {'(': ')', '{': '}', '[': ']'}
    closed = set([']', '}', ')'])

    for _ in range(len(s)):
        if List[0] in closed:
            List.append(List[0])
            List.popleft()
            continue
        else:  # 여는 괄호
            que = deque()
            check = 0
            temp = copy.deepcopy(List)

            List.append(List[0])
            List.popleft()

            que.append(temp.popleft())

            for j in range(len(s) - 1):
                if temp[j] in closed:
                    if len(que) == 0:
                        check = -1
                        break
                    else:
                        p = que.pop()
                        if dic[p] == temp[j]:
                            continue
                        else:
                            check = -1
                            break
                else:
                    que.append(temp[j])

            if check == 0 and len(que) == 0:
                answer += 1

    return answer
728x90
Comments