μΉ΄ν
κ³ λ¦¬ μμ
4. νμμ°μ°(stack)_νμ΄μ¬
@ENFJ
2025. 2. 13. 21:37
πμ 체 μ½λ
import sys
sys.stdin=open("C:\\input.txt",'rt')
a = input()
print(a)
stack = []
res = ''
for x in a:
# xκ° μ«μμΌ κ²½μ°
if x.isdecimal():
stack.append(int(x))
# xκ° μ«μκ° μλ κ²½μ°
else:
if x =='+':
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2+n1)
elif x =='-':
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2-n1)
elif x == '*':
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2*n1)
elif x == '/':
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2/n1)
print(stack[0])
π νμ νκΈ°λ² κ³μ°λ²
νμ νκΈ°λ²μμλ μ°μ°μκ° λ€μ μμΉνκΈ° λλ¬Έμ,
μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μ½μΌλ©΄μ μ«μλ μ€νμ λ£κ³ , μ°μ°μλ κΊΌλ΄μ κ³μ°νλ©΄ λΌ.
π νμ νκΈ°λ² μμ
볡μ¬νΈμ§
3 5 2 * + 8 -
→ κ³μ° μμ:
- 3 → μ€νμ push
- 5 → μ€νμ push
- 2 → μ€νμ push
- * → 5 * 2 = 10, κ²°κ³Όλ₯Ό μ€νμ push
- + → 3 + 10 = 13, κ²°κ³Όλ₯Ό μ€νμ push
- 8 → μ€νμ push
- - → 13 - 8 = 5, κ²°κ³Όλ₯Ό μ€νμ push
β‘ μ΅μ’ κ²°κ³Ό = 5
π μ½λ λΆμ
import sys sys.stdin = open("C:\\Users\\csh\\Documents\\μ½λ©ν
μ€νΈ\\μλ£κ΅¬μ‘°νμ©(μ€ν,ν,ν΄μ¬,ν)\\input.txt", 'rt') a = input() # νμ νκΈ°λ² μμ μ
λ ₯ print(a) stack = [] # μ«μλ₯Ό μ μ₯ν μ€ν
- a: νμ νκΈ°λ² μμ (곡백 μμ΄ μ λ ₯)
- stack: μ«μ μ μ₯μ μν μ€ν
π’ μ«μμΈ κ²½μ° → μ€νμ push
if x.isdecimal(): stack.append(int(x))
- isdecimal() → μ«μμΈμ§ νμΈ
- μ«μλ©΄ μ μνμΌλ‘ λ³νν΄μ μ€νμ push
ββ κ³±μ /λλμ μ²λ¦¬
else: if x == '+': n1 = stack.pop() n2 = stack.pop() stack.append(n2 + n1) elif x == '-': n1 = stack.pop() n2 = stack.pop() stack.append(n2 - n1) elif x == '*': n1 = stack.pop() n2 = stack.pop() stack.append(n2 * n1) elif x == '/': n1 = stack.pop() n2 = stack.pop() stack.append(n2 / n1)
- μ°μ°μκ° λμ€λ©΄ μ€νμμ λ κ°μ μ«μλ₯Ό κΊΌλ
- n2κ° λ¨Όμ pop() → μ°μ°μ μΌμͺ½ μ«μ
- n1μ΄ λ€μ pop() → μ°μ°μ μ€λ₯Έμͺ½ μ«μ
- κ³μ° ν κ²°κ³Όλ₯Ό λ€μ μ€νμ push
β μ΅μ’ κ²°κ³Ό μΆλ ₯
print(stack[0])
- μ€νμ λ§μ§λ§ κ°μ΄ μ λ΅μ΄λ―λ‘ μΆλ ₯
π‘ μ€ν μμ
μ λ ₯
352*+8-
κ³μ° κ³Όμ (μ€ν μν)
λ¬Έμμ°μ°μ€ν μν
3 | push | [3] |
5 | push | [3, 5] |
2 | push | [3, 5, 2] |
* | 5 * 2 = 10 → push | [3, 10] |
+ | 3 + 10 = 13 → push | [13] |
8 | push | [13, 8] |
- | 13 - 8 = 5 → push | [5] |
μΆλ ₯ κ²°κ³Ό
5
β³ μκ° λ³΅μ‘λ λΆμ
- O(n) → νμ νκΈ°λ² μμμ ν λ²λ§ μννλ©΄μ μ°μ°
- μ€ν μ°μ°(push, pop) → O(1) μ΄λ―λ‘ μ 체μ μΌλ‘ λ§€μ° λΉ λ¦
πΉ μ 리
β
νμ νκΈ°λ² μμμ μ€νμ μ¬μ©ν΄ κ³μ°
β
μ°μ°μλ₯Ό λ§λλ©΄ μ«μ λ κ°λ₯Ό κΊΌλ΄μ κ³μ° ν λ€μ push
β
μκ° λ³΅μ‘λ O(n), λ§€μ° ν¨μ¨μ