[λ°±μ€/python] 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λ₯Ό μΆλ ₯νλ€.
μ λ΅
n = int(input())
numbers = []
for i in range(n):
numbers.append(int(input()))
stack = []
result = []
k = 0
def s_pop(s):
global k
while n > k and stack and numbers[k] == s[-1]:
s.pop()
result.append("-")
k += 1
for i in range(1, n+1):
stack.append(i)
result.append("+")
if numbers[k] == stack[-1]:
s_pop(stack)
if n > k:
print("NO")
else:
for i in result:
print(i)
μ°μ nκ³Ό nκ°μ μ μλ₯Ό numbersμ μ λ ₯λ°λλ€.
1λΆν° μ μλ₯Ό μ μ₯ν stackκ³Ό κ²°κ³Όλ₯Ό μ μ₯ν result λ°°μ΄μ λ§λ€κ³
numbers λ°°μ΄μ λμμ μ§μ ν kλ₯Ό λ§λ€μ΄ λ°°μ΄μ 첫λ²μ§Έλ₯Ό κ°λ¦¬ν€κΈ° μν΄ 0μ μ μ₯νλ€.
for i in range(1, n+1):
stack.append(i)
result.append("+")
if numbers[k] == stack[-1]:
s_pop(stack)
1λΆν° nκΉμ§μ μ«μλ₯Ό μ΄μ©νκΈ° μν΄ λ²μλ 1λΆν° n+1λ‘ μ€μ νκ³
stackμ 1λΆν° λ£μΌλ©΄μ resultμ +λ₯Ό μ μ₯νλ€.
λ§μ½ μ λ ₯λ°μ μ«μ numbersμ kλ²μ§Έκ° stackμ λ§μ§λ§μ μ μ₯λ μ«μμ κ°λ€λ©΄ s_pop ν¨μλ₯Ό μ€ννλ€.
첫 μ€νμ΄λΌλ©΄ numbersμ 첫λ²μ§Έ μ«μμ λ°©κΈ stackμ λ£μ μ«μ 1μ΄ λΉκ΅λ κ²μ΄λ€.
def s_pop(s):
global k
while n > k and stack and numbers[k] == s[-1]:
s.pop()
result.append("-")
k += 1
s_pop ν¨μμμλ λ³μ kλ₯Ό μ¬μ©νκΈ° μν΄ global kλ₯Ό μ μΈν΄μ€λ€.
β numbers μ«μ λ°°μ΄μ κ°μ₯ ν° μ«μμΈ nκ³Ό λΉκ΅λμμ΄ λ numbers λ°°μ΄μ μΈλ±μ€μΈ kλ₯Ό λΉκ΅νμ¬ nμ΄ λ ν¬κ³
β stackμ΄ λΉμ΄μμ§ μκ³
β numbersλ°°μ΄μ kλ²μ§Έ μ«μμ stack λ°°μ΄μ λ§μ§λ§ μ«μκ° μΌμΉν λ
stack.pop()μ νκ³ resultμ -λ₯Ό μ μ₯νλ€.
numbers λ°°μ΄μ λΉκ΅λμμ λ€μμΌλ‘ λ°κΎΈκΈ° μν΄ μΈλ±μ€κ° λ kμ 1μ λν΄μ€λ€.
μ κ³Όμ μ ν΄λΉ μ‘°κ±΄μ΄ λ§μ‘±ν λμ λ°λ³΅ν΄μ€λ€.
if n > k:
print("NO")
else:
for i in result:
print(i)
λͺ¨λ κ³Όμ μ λ§μΉ λ€ numbersμ μΈλ±μ€μΈ kκ° numbersμ λ§μ§λ§ μΈλ±μ€λ³΄λ€ μλ€λ©΄
λͺ¨λ μ«μλ₯Ό λΉκ΅ν΄λ³΄μ§λͺ»νκ³ λλλ€λ λ»μ΄λ―λ‘ "NO"λ₯Ό μΆλ ₯νκ³
μλλΌλ©΄ resultμ μ μ₯ν΄λμλ κ°μ νλμ© μΆλ ₯νλ€.
'πμκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/python] 1316λ² : κ·Έλ£Ή λ¨μ΄ 체컀 (0) | 2021.03.16 |
---|---|
[λ°±μ€/python] 1021λ² : νμ νλ ν (0) | 2021.03.12 |
[λ°±μ€/python] 4949λ² : κ· νμ‘ν μΈμ (0) | 2021.03.12 |
[λ°±μ€/python] 11651λ² : μ’ν μ λ ¬νκΈ° 2 (0) | 2021.03.11 |
[λ°±μ€/python] 2805λ² : λ무 μλ₯΄κΈ° (0) | 2021.03.11 |