[phothon]2504:カッコ内の値コードと説明



2504:かっこの値
10の投稿を見て、数字と文字(, ), [, ]の接着剤を積み重ねました.1つのArrayには1つのタイプしかないと考えられているので、この方法は身につけていません.
次のコードはスタックに括弧を付けるだけです.

方法


例1の|∧4|を計算する際には、2∧(2+3∧3)+28732*(2+3*3)+2*32∧(2+3𕖱3)+2𕖱3を用いた.この式を分配法則を用いて解くと,2872+2ͩ3ͩ3+2ͩ3*2+2*3ͨ2+2ͩ3+2ͩ3が得られる.

コード順序

  • スタックを使用してカッコの問題を解決する場合、左カッコが発生した場合はスタックに追加します.ここで、値に(()[[]])([])を乗算してカッコ内の値を計算します.最初からなぜこんなことをしたのか疑っていました.🤔 カッコは既に開いているので、中には他のカッコが入ることが予想されます.
  • closedカッコが表示された場合、(1)一致を確認してから(2)計算します.
  • popはスタックが空である必要があります.スタックにはinnerValue(しかありません.一致しない場合は[が実行されます.
  • はい、今お会計できます.return 0または()インスタントラーメン[]innerValueに追加します.なぜここに2か3を加えたのか疑問だ.🤔 ここで、resultの値を理解するために、innerValueが考えられる.内の値は28722*22ͨ2です.ここには括弧に乗じた値が書かれています.
  • 結論として、計算は(()...または()のようなペアの場合にのみ行われる.
  • ()は括弧を閉じたことを示す.たとえば、[]この場合、右カッコを通過するたびにinnerValue //= 2나 3の値が小さくなる必要があることに気づくかもしれません.
  • コード#コード#

    import sys
    input = sys.stdin.readline
    
    
    def checkBalence(bracket: str) -> int:
        result = 0
        innerValue = 1
        bracketStack = []
    
        for index in range(len(bracket)):
            if bracket[index] == "(":
                bracketStack.append("(")
                innerValue *= 2
            elif bracket[index] == "[":
                bracketStack.append("[")
                innerValue *= 3
            elif bracket[index] == ")":
                if not bracketStack or bracketStack[-1] != "(":
                    return 0
                if bracket[index-1] == "(":
                    result += innerValue
                bracketStack.pop()
                innerValue //= 2
            else:
                if not bracketStack or bracketStack[-1] != "[":
                    return 0
                if bracket[index-1] == "[":
                    result += innerValue
                bracketStack.pop()
                innerValue //= 3
    
            # print(
            #     f"result: {result} innerValue: {innerValue} stack {bracketStack}")
    
        if not bracketStack:
            return result
        return 0
    
    
    inputBracket = input().rstrip()
    print(checkBalence(inputBracket))
    

    コメントリンク


    ドックステーション