[Baekjoon] 1874_μ€ν μμ΄
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/1874)
<μ€ν μμ΄>
λ¬Έμ
μ€ν (stack)μ κΈ°λ³Έμ μΈ μλ£κ΅¬μ‘° μ€ νλλ‘, μ»΄ν¨ν° νλ‘κ·Έλ¨μ μμ±ν λ μμ£Ό μ΄μ©λλ κ°λ μ΄λ€.
μ€νμ μλ£λ₯Ό λ£λ (push) μ ꡬμ μλ£λ₯Ό λ½λ (pop) μ κ΅¬κ° κ°μ μ μΌ λμ€μ λ€μ΄κ° μλ£κ° μ μΌ λ¨Όμ λμ€λ
(LIFO, Last in First out) νΉμ±μ κ°μ§κ³ μλ€.
1λΆν° nκΉμ§μ μλ₯Ό μ€νμ λ£μλ€κ° λ½μ λμ΄λμμΌλ‘μ¨, νλμ μμ΄μ λ§λ€ μ μλ€. μ΄λ, μ€νμ push νλ
μμλ λ°λμ μ€λ¦μ°¨μμ μ§ν€λλ‘ νλ€κ³ νμ.
μμμ μμ΄μ΄ μ£Όμ΄μ‘μ λ μ€νμ μ΄μ©ν΄ κ·Έ μμ΄μ λ§λ€ μ μλμ§ μλμ§, μλ€λ©΄ μ΄λ€ μμλ‘
pushμ pop μ°μ°μ μνν΄μΌ νλμ§λ₯Ό μμλΌ μ μλ€. μ΄λ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫 μ€μ n (1 ≤ n ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° nκ°μ μ€μλ μμ΄μ μ΄λ£¨λ 1 μ΄μ nμ΄νμ
μ μκ° νλμ© μμλλ‘ μ£Όμ΄μ§λ€. λ¬Όλ‘ κ°μ μ μκ° λ λ² λμ€λ μΌμ μλ€.
μΆλ ₯
μ λ ₯λ μμ΄μ λ§λ€κΈ° μν΄ νμν μ°μ°μ ν μ€μ ν κ°μ© μΆλ ₯νλ€.
pushμ°μ°μ +λ‘, pop μ°μ°μ -λ‘ νννλλ‘ νλ€. λΆκ°λ₯ν κ²½μ° NOλ₯Ό μΆλ ₯νλ€.
λ¬Έμ νμ΄
- my solution
import sys
if __name__=='__main__':
n=int(sys.stdin.readline().strip())
arr=[]
for i in range(n): #μμ΄ μ
λ ₯
arr.append(int(sys.stdin.readline().strip()))
idx=0
idx_stack=1
temp=[] #μ€λ¦μ°¨μ push
answer=[] # +,-
result=[] # λ§λ€μ΄μ§ μμ΄
while True:
if idx>=n or idx_stack>n+1: #μ’
λ£ μ‘°κ±΄
break
if len(temp)!=0 and temp[-1]==arr[idx]: #tempμ μ΄λ―Έ μλ κ° pop
result.append(temp.pop())
answer.append("-")
idx+=1
elif arr[idx]!=idx_stack: # push
temp.append(idx_stack)
idx_stack+=1
answer.append("+")
elif arr[idx]==idx_stack: # λ£μΌλ €λ κ°μ΄ νμν κ°μ΄λ©΄
result.append(idx_stack) # push μ μ λ°λ‘ resultμ μΆκ°
answer.append("+") # puxh
answer.append("-") # pop
idx_stack+=1
idx+=1
if arr==result: # λ§λ€μ΄μ§ μμ΄μ΄ μ
λ ₯ μμ΄κ³Ό κ°μΌλ©΄
for i in answer:
print(i)
else: # λΆκ°λ₯ν κ²½μ°
print("NO")
μμ λΆν° λ¬Έμ λ§ λ³΄κ³ μ΄ν΄λ₯Ό λͺ»ν΄μ ν¬κΈ°νλ λ¬Έμ μ΄λ€.
μ°¨κ·Όμ°¨κ·Ό μ΄ν΄λ³΄λ μκ°λ³΄λ€ λ¬Έμ λ₯Ό μ΄ν΄νκΈ° μ¬μ λ€.
1) nμ λ ₯, λ§λ€ μμ΄ μ λ ₯_arr
2) whileλ¬Έμ μ¬μ©νμ¬ μμ΄ λ§λ€κΈ°
2-1) μ’ λ£ μ‘°κ±΄) arrμ indexλ₯Ό λκ±°λ n+1λ³΄λ€ ν° κ²½μ°
2-2) tempμ μ΄λ―Έ μλ κ°μ΄λ©΄ pop
2-3) idx_stackμ΄ νμν κ°μ΄ μλλ©΄
2-4) idx_stackμ΄ μμ΄μ νμν κ°μ΄λ©΄ push
3) λ§λ€μ΄μ§ μμ΄μ΄ μ λ ₯ μμ΄κ³Ό κ°μΌλ©΄ μΆλ ₯, κ°μ§ μμΌλ©΄ 'NO' μΆλ ₯
μκ°π€
λͺ λ²μ΄λ μ§λμΉ λ¬Έμ μΉκ³ λ μκ°λ³΄λ€ 빨리 ν΄κ²°ν μ μμλ€.
λ¬Έμ μ΄ν΄λ₯Ό λͺ»νλ κ²μ΄ μ»Έλ κ² κ°λ€. λ¬Έμ λ₯Ό μ΄ν΄νκ³ λμλ κΈλ°© μ½λλ₯Ό ꡬνν μ μμλ€.
νμ΄μ¬μμλ listλ₯Ό νμ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμλ€.
λ΄κ° μκ°νκΈ°μ μ΄ λ¬Έμ μ ν¬μΈνΈλ
1) λ¬Έμ μ΄ν΄!!! κ° κ°μ₯ ν¬κ³
2) νμ΄μ¬_ listμ νμ©, 쑰건문 μ¬μ©
μ΄μλ κ² κ°λ€.