나의 개발일지

[프로그래머스] Lv.2 괄호 회전하기 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.2 괄호 회전하기 [Python, 파이썬]

YoonJuHan 2023. 5. 17. 15:50

 

def solution(s):
    answer = 0

    for i in range(len(s)):
        x = s[i:] + s[:i]   # 문자열 회전해서 x에 저장
        stack = []  # 스택으로 사용할 빈 리스트 생성
        st = -1     # 스택의 시작점 -1로 지정
        for j in range(len(x)): # 회전한 문자열을 반복
            if stack == [] or st == -1: # 스택이 비었거나 시작점이 -1이면 무조건 하나 추가
                stack.append(x[j])  # 스택에 괄호 하나 넣기
                st += 1     # 스택 높이 올리기
            elif x[j] == ")" :  # 닫는괄호 ) 를 만나면
                if stack[st] == "(":    # 현재 스택의 위치가 ( 인지 확인
                    st -= 1     # 짝이 맞으니까 스택 하나 내리고
                    stack.pop() # ( 를 스택에서 빼냄
                else: break     # 짝이 안맞으면 더 볼 필요 없이 브레이크
            elif x[j] == "]" :  # 위 () 방식과 마찬가지
                if stack[st] == "[":
                    st -= 1
                    stack.pop()
                else: break
            elif x[j] == "}" :  # 위 () 방식과 마찬가지
                if stack[st] == "{":
                    st -= 1
                    stack.pop()
                else: break
            else:   # 닫는 괄호가 아니고 여는 괄호는 스택에 넣기
                stack.append(x[j])
                st += 1

        if st == -1:    # 반복 다 해서 스택이 비어있으면 올바른 괄호란 뜻
            answer += 1

    return answer
Comments