データ構造-スタック

14105 ワード

スタック


質問です。


大数
先生は賢洙に数字をあげて、その数字の中のmの数字を取り除いて、最大の数字を創造させました.賢秀を助けてくれ(数字の順序を保つ必要があります)
5276823があって三桁を外すと
7823は最大の数字になります.
■説明の入力
最初の行には、1000以下の数値と小数点以下の桁数が含まれます.
■出力説明
最大出力数.
■入力例1 5276823
■出力例1 7823
■入力例2 99772526415
■出力例2 99776
num , m = map(int,input().split())
num = list(map(int,str(num)))

stack = []
for x in num:
    while stack and m > 0 and stack[-1] < x :# stack 에 먼가 있으면 돌아가고 빈 리스트면 멈춤
        stack.pop()  #앞에와 비교해서 작으면 지움
        m-=1 # 횟수를 감소
    stack.append(x)
if m!=0: # more delete
    stack = stack[:-m] # 내림차순 정렬이라 남은 m만큼 날려버림

res = ''.join(map(str,stack))
print(res)

質問です。


接尾辞式の作成
中位マークを入力したら、後位マークに変換するプログラムを作成してください.
中位数式は私たちがよく使う式です.演算子が被演算子の間(3+5など)にある場合は、中位数です.
接尾辞タグは、35+などの演算子が被演算子の後ろにあるタグです.
たとえば、中央値式が3+52を下位値として表す場合、352+として表す.
カッコが演算子優先の場合は、次のようになります.
(3+5)2は35+2に変えなければなりません.
※ポストマーク式を理解していなければ、Googleで学ぶことができます.
■説明の入力
最初の行には、中位数タグが表示されます.長さは100を超えない.式は、1~9の数値と+、-、/、(、)演算子のみで構成されます.
■印刷出力説明接尾辞タグ式.
■入力例13+52/(7-2)
■出力例1 35272-/+
■入力例2 3(5+2)-9
■出力例2 352+*9-

# 접근

# 순서가 있는 연산자를 스택 집합안에 만약 연산처리가 더 빠른게 온다면 그대로 / 느린게 온다면 pop을 해서 숫자 집합으로  ( 아직 적용안된 연산자 개념)
# (  언제나 append--> 닫는괄호 만나기 전까지 적용이 아닌니까)
# 숫자는 최종 출력 값에 쌓는다


a= input()

stack =[]
res =''

for x in a:
    if x.isdecimal(): ##number ==> accumulate
        res += x 
    else:
        if x =="(":
            stack.append(x)
        elif x =="*" or x == "/":
            while stack and (stack[-1] == '*'or stack [-1] =='/'):
                res+=stack.pop()
            stack.append(x)
        elif x == '+' or x =='-':
            while stack and stack [-1] != '(':
                res +=stack.pop()
            stack.append(x)
        elif x ==')':
            while stack and stack [-1] != '(':
                res +=stack.pop()
            stack.pop()
while stack:
    res+=stack.pop()
print(res)

           

質問です。


ポスト計算
後置演算式がある場合は、演算結果を出力するプログラムを作成します.
3(5+2)−9を接尾辞演算子として表すと352+9−となり、その結果は21となる.
■説明の入力
最初の行には、接尾辞演算子が表示されます.計算式の長さは50を超えない.式は、1~9の数値と+、-、*、/、(、)演算子のみで構成されます.
■出力説明
計算結果を出力します.
■入力例13352+*9-
■出力例1 12
# 연산자를 만나면 앞의 두숫자와 연산 + 연산한값을 다시 푸시 
# 숫자는 무조건 stack 푸시
## 정답

a = input()
stack = []

for x in a:
    if x.isdecimal():
        stack.append(int(x))
    elif x == '+':
        n1 = stack.pop()
        n2 = stack.pop()
        res = n2 +n1
        stack.append(res)
    elif x == '-':
        n1 = stack.pop()
        n2 = stack.pop()
        res = n2 - n1
        stack.append(res)
    elif x == '*':
        n1 = stack.pop()
        n2 = stack.pop()
        res = n2 * n1
        stack.append(res)
    elif x == '/':
        n1 = stack.pop()
        n2 = stack.pop()
        res = n2 / n1
        stack.append(res)

    print(stack)
print(stack[-1])