본문 바로가기
알고리즘/프로그래머스 level 1,2

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

by 코딩개미뚠뚠 2021. 5. 27.
반응형
def solution(s):
    answer = 0
    for i in range(len(s)):
        if i == 0: s 
        else: s = s[1:] + s[0]
        if check(s)==True:
            answer += 1
    return answer
def check(s):
    stack = []

    for i in s:
        if i in ('[', '(', '{'): stack.append(i)
        else:
            if not stack: return False
            x = stack.pop()
            if i == ']' and x != '[': return False
            elif i == ')' and x != '(': return False
            elif i == '}' and x != '{': return False
    
    if stack: return False     #스택에 남아있는 경우
    return True

<내 풀이>

 

문제를 풀고 다른 사람들은 어떻게 풀었을까 찾아보다가

deque에 넣고 rotate라는 함수를 이용한 풀이를 볼 수 있었다.

 

retoate(num) 일 때 -> num이 양수면 오른쪽으로 num만큼 회전 

                              num이 음수면 왼쪽으로 num만큼 회전

 

 

위의 문제 같은 경우 s.rotate(-i)를 해주면 된다. rotate를 사용할 경우 i가 0일 경우를 따로 고려해주지 않아도 되어서 코드가 좀 더 간결해진다.

 

from collections import deque
def solution(s):
    answer = 0
    for i in range(len(s)):
        s_list = deque(s)
        s_list.rotate(-i)
        if check(s_list) == True:
            answer += 1
    return answer
def check(s):
    stack = []

    for i in s:
        if i in ('[', '(', '{'): stack.append(i)
        else:
            if not stack: return False
            x = stack.pop()
            if i == ']' and x != '[': return False
            elif i == ')' and x != '(': return False
            elif i == '}' and x != '{': return False
    
    if stack: return False #스텍에 남아있는 경우
    return True

<rotate를 활용한 풀이>

 

함수들을 많이 아는 게 힘인 것 같다. (●'◡'●)

문제를 많이 풀면서 차근차근 익혀가자!!

반응형

댓글