Today
Total
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 괄호 회전하기 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 괄호 회전하기 - Python

ukunV 2021. 11. 10. 02:08

Link

 

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

 

programmers.co.kr

 

Solution

시작에 앞서 필자의 풀이는 틀린 풀이이다. 필자는 예를 들어 '( [ ) ]'같은 경우도 True 인 경우라고 생각했으나 다른 풀이를 찾아보며 '( [ ) ]'인 경우는 False라는 것을 알게 되었다. 올바른 괄호의 경우 괄호가 엇갈리게 닫혀있는 경우는 제외한다.

def isCorrect(s):
    if s[0] == ']' or s[0] == '}' or s[0] == ')':
        return False

    cnt = [0, 0, 0]

    for i in range(len(s)):
        if s[i] == '[':
            cnt[0] += 1
        elif s[i] == ']':
            cnt[0] -= 1
        elif s[i] == '{':
            cnt[1] += 1
        elif s[i] == '}':
            cnt[1] -= 1
        elif s[i] == '(':
            cnt[2] += 1
        elif s[i] == ')':
            cnt[2] -= 1

        if min(cnt) < 0:
            return False

    return cnt == [0, 0, 0]

def solution(s):
    if len(s) % 2 == 1:
        return 0

    answer = 0

    for i in range(len(s)):
        answer += isCorrect(s[i:] + s[:i])

    return answer
📌 Tip: a = 0 일 때 a += True -> a = 1

 

Other Solution

필자의 풀이는 틀린 풀이 이므로 해당 풀이를 참고바란다.

from collections import deque

def check(string):
    stack = []

    for s in string:
        if len(stack) == 0:
            if s == ')' or s == '}' or s == ']':
                return False
        if s == '(' or s == '{' or s == '[':
            stack.append(s)
        else:
            if s == ')' and stack[-1] == '(':
                stack.pop()
            elif s == '}' and stack[-1] == '{':
                stack.pop()
            elif s == ']' and stack[-1] == '[':
                stack.pop()


    if stack:
        return False
    else:
        return True

def solution(s):
    answer = 0

    queue = deque(list(s))

    i = 0
    while i != len(queue):
        if check(queue):
            answer += 1

        queue.rotate(-1)
        i += 1

    return answer
🔑 key point: stack
📌 Tip: queue.rotate(-1)
Comments