본문 바로가기
💡Algorithm/python

[python]2504_괄호의 값

by haegomm 2023. 7. 11.

1 걸린 시간 : 40m

2 사용한 자료구조 및 개념 : stack


💡문제풀이 아이디어 및 어려웠던 점


💫 아이디어

    1️⃣ temp로 괄호의 깊이를 계산한다.

    2️⃣ 닫힌 괄호가 나오면 현재까지 계산한 temp값을 answer에 더해주고 짝을 이루는 여는 괄호를 스택에서 제거한다

    3️⃣ 닫는 괄호가 나오면서 깊이가 줄었으니 해당 괄호 값 만큼 temp를 나눠준다.


(()[[]]) 의 경우

 

( temp에 해당 괄호의 값인 2를 곱해준다.

( 여는 괄호가 나온다는 것은 깊이가 깊어졌다는 뜻이다. (깊이가 깊어졌다 → 괄호가 중첩되었다!)

따라서 temp에 2를 또 곱해준다.

) 닫는 괄호가 나왔다. 닫는 괄호는 깊이가 하나 줄었다는것! 중복 괄호가 하나 사라진다는 뜻이다.

그래서 현재 temp값을 answer에 더해주고 temp를 2로 나눠주는 것!

그러면 temp는 4 → 2가 되고 이후에 나오는 [ 는 여전히 양 끝 ( ) 에 중첩되어 있으니 temp 2에서 3을 곱해주면 되는 것이다!

 


Solution Code & 주석

brackets = input()
stack = []
temp = 1
answer = 0

for i in range(len(brackets)):
    if brackets[i] == '(':
        stack.append(brackets[i])
        temp *= 2
    elif brackets[i] == '[':
        stack.append(brackets[i])
        temp *= 3
    elif brackets[i] == ')':
        if not stack or stack[-1] == '[':
            answer = 0
            break
        if brackets[i - 1] == '(':
            answer += temp
        stack.pop()
        temp //= 2
    elif brackets[i] == ']':
        if not stack or stack[-1] == '(':
            answer = 0
            break
        if brackets[i - 1] == '[':
            answer += temp
        stack.pop()
        temp //= 3

if stack or answer == 0:
    print(0)
else:
    print(answer)

'💡Algorithm > python' 카테고리의 다른 글

[python]2493_탑  (2) 2023.07.13
[python]2800_괄호 제거  (0) 2023.07.12
[python]10799_쇠막대기  (0) 2023.07.10
[python]1874_스택 수열  (0) 2023.07.06
[python]2346_풍선 터뜨리기  (0) 2023.07.05