今日のタックルログ


この問題で遭遇したタックルを記録するとどうなるか?TILを装ったタックルログとも呼ばれる!(まるまる2、3時間も食べましたが…)
Pythonで問題を解く

質問:2504。かっこの値


https://www.acmicpc.net/problem/2504
これは典型的なスタックタイプの問題です.
しかし、誰もが与えられたカッコが正しいかどうかは容易に考えられますが、肝心なのはどのように中間値を格納するかです.考えなければならない反例も多く、厄介な問題だ.
カッコと計算結果を1つのスタックに置く方法で解いた.

土工

if b == '(' or '[':ほほほ、何を間違えたの...?驚いたことに、何の考えもなく、そんなに少なく書いていて、最初はスタックがおかしく動いていたので、何だと思いますか.

シャベル本

typeerror: 'str' object is not callable typeerror: 'int' object is not callable△驚いたことに、今日は両方見ました!
このようなものが現れたのは...あなたはその予約語を変数名に書きました.
億...⭐️

シャベル男巴三:aka。反例パーティー


ここから先は自業自得の戦いだ.🔥 考えなければならない反例が多すぎて、書ききれないかもしれません.
私が選ばれたのは「([]」、「[]」というテストケースです.
こちらの回答を参考にすると助かります…!!
(半礼鉢だったので、ありがたかったです.🙇‍♀️
👉 https://www.acmicpc.net/board/view/30310

最終コード

bracket_str = input()

def get_bracket_val(string):
    stack = []
    bracket_val = 0
    
    for b in string:
        if b == '(' or b == '[':
            stack.append(b)
        else:
            if not stack: return 0
            if b == ')':
                if stack[-1] == '(':
                    stack.pop()
                    stack.append('2')
                elif stack[-1] == '[': return 0
                elif stack[-1].isdigit(): 
                    total = 0
                    while stack and stack[-1].isdigit():
                        total += int(stack.pop())
                    if not stack: return 0
                    if stack[-1] == '(':
                        stack.pop()
                        push_val = total * 2
                        stack.append(str(push_val))
                    elif stack[-1] == '[': return 0
            else: #b == ']'
                if stack[-1] == '[':
                    stack.pop()
                    stack.append('3')
                elif stack[-1] == '(': return 0
                elif stack[-1].isdigit(): 
                    total = 0
                    while stack and stack[-1].isdigit():
                        total += int(stack.pop())
                    if not stack: return 0
                    if stack[-1] == '[':
                        stack.pop()
                        push_val = total * 3
                        stack.append(str(push_val))
                    elif stack[-1] == '(': return 0
    
    for x in stack:
        if x.isdigit(): bracket_val += int(x)
        else: return 0
        
    return bracket_val

print(get_bracket_val(bracket_str))