백준 2504번 괄호의 값 (python)

Kim Yongbin·2023년 9월 23일
0

코딩테스트

목록 보기
74/162

Problem

https://www.acmicpc.net/problem/2504

Solution

import sys

def solution(p_list):
    stack = []
    for p in p_list:
        if p in ["(", "["]:
            stack.append(p)

        elif stack and p in [")", "]"]:
            v = 0

            last = stack.pop()
            while stack and isinstance(last, int):
                v += last
                last = stack.pop()

            v = 1 if v == 0 else v
            if p == ")" and last == "(":
                stack.append(2 * v)
            elif p == "]" and last == "[":
                stack.append(3 * v)
            else:
                return 0

        else:
            return 0

    if all(isinstance(s, int) for s in stack):
        return sum(stack)
    else:
        return 0

parentheses = sys.stdin.readline().strip()
print(solution(parentheses))

괄호를 스택에 쌓아가면서 계산하여 숫자도 같이 스택에 넣었다.

) 또는 ]이 나오면 숫자가 아닌 값이 나올 때까지 뽑았고, 나오는 숫자들은 모두 더하였다.

제대로 된 괄호가 나오면 규칙에 맞게 곱하여 다시 스택에 넣었다.

Reference

profile
반박 시 여러분의 말이 맞습니다.

0개의 댓글