π[1874] λ°±μ€ μ€ν μμ΄ νμ΄ λ° μ°Έκ³ μλ£(Python)
μ€ν(Stack)μ΄λ?
μ€νμ λμ€μ λ€μ΄μ¨ μμκ° λ¨Όμ λκ°λ νμμΈ LIFO(Last In First Out)
μ μ±μ§μ κ°λ μ ν μλ£ κ΅¬μ‘°μ΄λ€.
νμ΄μ¬μμλ 리μ€νΈ
λ₯Ό μκ°ν μ μλ€.
리μ€νΈλ append()
μ pop()
μ 2κ°μ§ μ°μ°μ΄ κ°λ₯νλ€.
λ λ€ κ°μ₯ λ€μ μμλ₯Ό μΆκ°
, μΆμΆ
νλ ν¨μλ‘, 맨 λ€μμλ§ μ°μ°μ΄ μ΄λ£¨μ΄μ§λ€.
μ½κ² μκ°νλ©΄ μ
μΆκ΅¬κ° νλ λΏμΈ λ°©μ΄λΌκ³ μκ°ν μ μλ€.
λ°±μ€ μ€νμμ΄
λ¬Έμ : https://www.acmicpc.net/problem/1874
μ€νμμ΄ λ¬Έμ λ μ€νμ΄ 2κ°κ° νμνλ€.
λ¨Όμ , β+β, β-βλ₯Ό μ μ₯ν result
μ€νμ΄ νμνκ³ , μ€μ λ‘ κ°μ΄ λ€μ΄κ°λ€ λκ°λ μ©λμ μ€νμΈ stack
νμνλ€.
μ½λ
import sys
n = int(sys.stdin.readline())
stack = []
result = []
find = True
count = 1
for i in range(n):
num = int(sys.stdin.readline())
while count <= num:
stack.append(count)
result.append('+')
count+=1
if stack[-1] == num:
stack.pop()
result.append('-')
else:
find = False
if not find:
print('NO')
else:
for i in result:
print(i)
μ½λ λΆμ
num
μ stack[]
μ λ€μ΄κ° μκ° μ
λ ₯λλ€.
κ·Έ μλ§νΌ whileλ¬Έμ΄ λμνλλ‘ λ―Έλ¦¬ μ€μ ν΄λ count=1
μ νμ©νλ€.
countλ λ°λ³΅ν μλ‘ count+=1μ νμ¬ μ¦κ°μμΌμ£Όκ³ , μ΄ countλ λ°λ³΅λ¬Έμ΄ λλλ©΄ κ²°κ΅ numμ΄λ κ°μ ν¬κΈ°μ μκ° λλ€.
μ΄ countλ₯Ό stack[]μ μΆκ°νκ³ , λ°λ³΅ν λλ§λ€ β+βλ₯Ό result[]μ μΆκ°νλ€.
λ§μ½, stack[]μ κ°μ₯ λ§μ§λ§ μκ° numκ³Ό κ°λ€λ©΄, stack[]μμ pop()μ°μ°μ μ€ννκ³ resultμ β-βλ₯Ό μΆκ°νλ€.
κ·Έκ² μλλΌλ©΄, find=False
λ₯Ό μ€μ νμ¬ νμ βNOβλ₯Ό μΆλ ₯νλλ‘ νλ€.
μ λμμ΄ λλλ©΄ find=TrueμΌ κ²½μ°μ λν΄ resultλ₯Ό μ°¨λ‘λλ‘ μΆλ ₯ν΄μ£Όλ©΄ λλ€.
μ°Έκ³ μλ£
https://hongcoding.tistory.com/39
https://data-flower.tistory.com/98
λκΈλ¨κΈ°κΈ°