データ構造-スタック
14105 ワード
スタック
質問です。
大数
先生は賢洙に数字をあげて、その数字の中のmの数字を取り除いて、最大の数字を創造させました.賢秀を助けてくれ(数字の順序を保つ必要があります)
5276823があって三桁を外すと
7823は最大の数字になります.
■説明の入力
最初の行には、1000以下の数値と小数点以下の桁数が含まれます.
■出力説明
最大出力数.
■入力例1 5276823
■出力例1 7823
■入力例2 99772526415
■出力例2 99776num , 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])
Reference
この問題について(データ構造-スタック), 我々は、より多くの情報をここで見つけました
https://velog.io/@nellholic108/자료구조-스택
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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)
# 접근
# 순서가 있는 연산자를 스택 집합안에 만약 연산처리가 더 빠른게 온다면 그대로 / 느린게 온다면 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)
# 연산자를 만나면 앞의 두숫자와 연산 + 연산한값을 다시 푸시
# 숫자는 무조건 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])
Reference
この問題について(データ構造-スタック), 我々は、より多くの情報をここで見つけました https://velog.io/@nellholic108/자료구조-스택テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol