DataStructure 1 11かっこの値(2504)
10553 ワード
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を出力する必要があります.
に答える
左かっこの場合、([スタックに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
Reference
この問題について(DataStructure 1 11かっこの値(2504)), 我々は、より多くの情報をここで見つけました https://velog.io/@angel_eugnen/DataStucture111괄호의-값2504テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol