- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

문제 이해 

stack으로 0번째 인덱스를 끝으로 옮기면서 만들어진 리스트에서 완전한 괄호의 갯수를 반환하는 것으로 이해했다. 

 

1. 괄호가 완전한지 알아야해서 check() 함수를 따로 만들었다 

2. 이는 스택을 이용해서 탐색하는 문자와 stack의 끝 문자가 올바른 괄호가 되면 스택에서 왼쪽 괄호를 없앤다 

3. 전체가 올바른 괄호가 된다면 스택에 더이상 원소가 없을 때 조건을 만족하므로 answer += 1 해준다 

 

4. 괄호를 회전한다(0번째 인덱스 오른쪽 끝으로 이동시키기)

 

 

참고한 블로그

 

- 정답 풀이 :

def solution(s):
    answer = 0
    temp = list(s)
    
    for _ in range(len(s)):
 
        st = []
        for i in range(len(temp)):
            if len(st) > 0:
                if st[-1] == '[' and temp[i] == ']':
                    st.pop()
                elif st[-1] == '(' and temp[i] == ')':
                    st.pop()
                elif st[-1] == '{' and temp[i] == '}':
                    st.pop()
                else:
                    st.append(temp[i])
            else:
                st.append(temp[i])
        if len(st) == 0:
            answer += 1
        temp.append(temp.pop(0))
 
    return answer

 

 

- 시도해본 풀이 :

테스트 14번 하나만 계속 틀렸던 풀이다. 한 문제때문에 삽질한거 스트레스 받네

특정 리스트에서 (), {}, [] 각각이 올바른 괄호를 만드는지 확인한다

count는 왼쪽의 갯수이고, 올바른 괄호가 만들어질 때마다 하나씩 줄어든다

각 경우에 왼쪽이 없을 때 오른쪽이 나오면 올바른 괄호가 아니니까 False로 만들고

왼쪽이 있을 때 오른쪽이 나오면 count를 줄인다 

def check(stack, left, right):
    flag = True
    count = 0
    for i in range(len(stack)):
        if stack[i] == left:
            count += 1
        elif stack[i] == right:
            if count == 0:
                flag = False
                break
            else:
                count -= 1
    return flag   

def solution(s):
    n = len(s)
    stack = list(s)    
    small_l, small_r = stack.count('('), stack.count(')')
    mid_l, mid_r = stack.count('{'), stack.count('}')
    big_l, big_r = stack.count('['), stack.count(']') 
    
    if (small_l != small_r) or (mid_l != mid_r) or (big_l != big_r):
        return 0
    else:    
        answer = 0
        while n > 0 :
            x = stack.pop(0)
            stack.append(x)
            #stack 올바른지 확인하는 함수 구현 
            if (check(stack, '(', ')')) and (check(stack, '{', '}')) and (check(stack, '[', ']')):
                answer += 1
            n -= 1      
            
        return answer

+ Recent posts