DataStructure 1 11かっこの値(2504)


DataStructure 1 11かっこの値(2504)


質問する


4つの記号「(」、「)」、「[」、「]」を使用して作成されたカッコでは、次のように定義されます.
正しいカッコ列は、1対のカッコの「()」と「[]」のみです.
Xが正しい括弧であれば、「(X)」または「[X]」が正しい括弧になります.
XとYの両方が正しい括弧であれば、それらを結合したXYも正しい括弧になります.
たとえば、「(()[]」または「()」[][[]]」は有効な括弧ですが、「([)]」または「(()()[]」は有効な括弧ではありません.任意の正しい括弧Xについて、その括弧の値(括弧値)を以下のように定義し、値(X)で表します.
「()」カッコ列の値は2です.
かっこ[]の値は3です.
「(X)」のかっこ値は2×値(X)で計算します.
「[X]」のかっこ値は3×値(X)で計算します.
有効カッコXとYを組み合わせたXYのカッコ値は、値(XY)=値(X)+値(Y)として計算されます.
たとえば、[[][][][]][]のカッコ値を指定します.()[]'のかっこ値は2+3×3=11なので「()[[]」のかっこ値は2×11=22.「([])」の値は2です.×3=6のため、カッコ全体の値は22+6=28です.
解決すべき問題は、指定したカッコを読み取り、前に定義した方法でカッコ値を計算して出力することです.

入力


最初の行には、カッコを表す文字列(文字列)が表示されます.ただし、長さは1以上、30以下です.

しゅつりょく


最初の行に整数を出力します.カッコ内の値を表します.入力したカッコが無効な場合は、0を出力する必要があります.

に答える

  • この括弧strが正しいかどうかを最初に確認するプロセスは、文
  • である必要がある.
  • スタックを迂回してdef hanwhile文で整数マージプロセスを実行します.
  • の値がIntegerの場合、tupleの最初の要素はNoneです.したがって、aとbはともに
  • である

  • 左かっこの場合、([スタックに2を追加](Add As(,2を追加)[,[スタックに3を追加](Add As[,3を追加)

  • 右かっこの場合、最後の値をlast 1とlast 2にポップアップして保存します.none値、すなわち、数値であれば、前の値にplusという関数を加算します.
    その他の場合、加算

    popとappendのやり方はこうです
  • コード#コード#

    import sys
    sys.stdin = open("input.txt", "rt")
    
    s = input()
    stack = []
    
    # 괄호 배열이 올바른지 확인하는 로직
    for x in s:
        if x =='(':
            stack.append('(')
    
        elif x == '[':
            stack.append('[')
    
        elif stack and x ==')':
            if stack[-1] == '(':
                stack.pop()
        elif stack and x == ']':
            if stack[-1] == '[':
                stack.pop()
        else:
            print(0)
            exit()
    if stack:
        print(0)
        exit()
    
    # 올바른 괄호 배열을 계산하는 로직
    
    def plus():
        while len(stack)>1: # 무조건 0보다는 커야 한다
            a, int1 = stack[-1]
            b, int2 = stack[-2]
            if a or b:
                break
            stack.pop()
            stack.pop()
            stack.append((None, int1+int2))
    
    for x in s:
        if x == '(':
            stack.append(('(',2))
        elif x == '[':
            stack.append(('[',3))
        elif x == ')' or x == ']':
            lastB, lastN = stack.pop()
            if lastB != None: # 괄호가 있는 경우
                stack.append((None, lastN)) # 숫자로 바꾸어 stack에 쌓는다
            else: # 괄호가 없고 직전이 숫자인 경우 곱하기 해 주어야 한다
                a , b = stack.pop()
                stack.append((None, lastN * b))
            plus()
    print(stack[-1][1])
    
        

    学識


    答えを参考にしました.しかし,if文としてstackをtuple値でスタックする方法は容易である.

    コメント


    DataStructure 1部分が終わり、次の節はDataStructure 2