본문 바로가기

알고리즘

프로그래머스) 괄호 회전하기-python

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

 

프로그래머스

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

programmers.co.kr

 

def zz(s):
    stack = []
    for j in range(len(s)):
        if len(stack) == 0:
            stack.append(s[j])
        else:
            if stack[-1] == '[' and s[j] == ']' :
                stack.pop()
            elif stack[-1] == '{' and s[j] == '}' : 
                stack.pop()
            elif stack[-1] == '(' and s[j] == ')' :
                stack.pop()
            else:
                stack.append(s[j])
    if len(stack) == 0:
        return True
    else:
        return False

def solution(s):
    answer = 0
    s = list(s)
    if len(s) % 2 !=0:
        return 0
    for i in range(len(s)):
        if zz(s):
            answer += 1
        s.append(s.pop(0))
    return answer

우선 문제를 보자마자 스택을 사용해야겠다는 생각이 들었다.

 

그러나 다른 생각이 들어서 코드를 짜봤다.

[], {}, () 딕셔너리를 만들고 (,{,[이 들어오면 +1, ),},]이 들어오면 -1을 넣는 방법으로 했다.

역시나 테케 14번에서 떨어졌다.

이런 방법은 문자열 안에 모두 짝이 있는지만 확인하는 것이고 문제에서 요구한 "올바른 괄호 문자열"인지는 판별하지 않는다.

때문에 스택을 사용해 하나씩 대조해야했다.

처음에 시도한 방법에서 실패한 후 1시간 동안 고민했다.

애초에 빨리 스택으로 전환했으면 10분이면 풀었을 문제였다...ㅠ