새소식

Problem solving/문제 풀이 - 2023.02.07

[파이썬] 프로그래머스 괄호 회전하기 풀이

  • -

문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 괄호 회전을 쉽게 하기 위해서 deque.rotate를 활용했다.
  • 올바른 괄호 쌍인지 확인하기 위해서 stack을 활용했다.
# 괄호 회전 -> deque.rotate로 구현
# 올바른 괄호 여부 확인 : stack으로!
from collections import deque

def solution(s):
    # 올바른 괄호 문자열의 수
    answer = 0
    # 올바른 괄호 쌍
    match = {"[" : "]", "(" : ")", "{" : "}"}
    # i 만큼 회전
    for i in range(len(s)):
        s_rot = deque(s)
        # 왼쪽으로 회전
        s_rot.rotate(-i)
        # 올바른 괄호 판별하기
        stack = []
        for c in s_rot:
            if c in ("[", "(", "{"):
                stack.append(c)
            else:
                # ], ), } 가 먼저 나오거나, 쌍이 맞지 않는 경우
                if not stack or match[stack[-1]] != c:
                    break
                else:
                    stack.pop()
        # break가 안 된 경우 -> 길이만 확인하면 됨
        else:
            # stack이 다 제거 된 경우
            if not stack:
                answer += 1
        
    return answer

다른 사람 풀이

  • 문자열을 회전하기 위해서 deque를 활용하고, 다시 문자열로 변경한 다음 str.replace를 활용했다.  
from collections import deque

def check(s):
    while True:
        if "()" in s: s=s.replace("()","")
        elif "{}" in s: s=s.replace("{}","")
        elif "[]" in s: s=s.replace("[]","")
        else: return False if s else True       

def solution(s):
    ans = 0
    que = deque(s)

    for i in range(len(s)):
        if check(''.join(que)): ans+=1
        que.rotate(-1)
    return ans
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.