[BaekJoon] 17298λ² : μ€ν°μ
Updated:
17298λ² : μ€ν°μ
[BaekJoon] 2493λ² : ν λ¬Έμ μ κ°μ μ νμ λ¬Έμ μ΄λ€. νμ μΌν°μ λλ..
λ§ κ·Έλλ‘ μ€λ₯Έμͺ½μ μμΌλ©΄μ λλ³΄λ€ ν° μ μ€μμ κ°μ₯ μΌμͺ½μ μλ μλ₯Ό μ°ΎμΌλ©΄ O(N^2) λμ΄λ²λ € μκ°μ΄κ³Όκ° λ°μνλ€.
μ€νμ μ¬μ©νλ©΄ λλλ° μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°λ€.
μ£Όμ΄μ§ μμ΄μ μλ°©ν₯μΌλ‘ λλ©΄μ μμ μ μννλ€.
- ν° μ μ€νμ top λ³΄λ€ λ΄κ° ν¬κ±°λ κ°μΌλ©΄ ν° μ μ€νμ top μ΄ λλ³΄λ€ ν° μκ° λμ¬ λ κΉμ§ pop νλ€.
- ν° μ μ€νμ΄ λΉμ΄μμΌλ©΄ λ΅μ -1 μ λ£κ³ ν° μ μ€νμ λλ₯Ό λ£λλ€.
- ν° μ μ€νμ΄ λΉμ΄μμ§ μλ€λ©΄ ν° μ μ€νμ top μ λ΅μ λ£κ³ λλ₯Ό ν° μ μ€νμ λ£λλ€.
κΈλ‘ λμ΄μμ΄ μ΄ν΄κ° μ μκ° μ μμ§λ§ μμΌλ‘ κ·Έλ €μ μ§μ ν΄λ³΄λ©΄ μ½κ² μ μ μλ€.
import sys
def solution():
answer = []
max_num = []
for num in reversed(arr):
while max_num and max_num[-1] <= num:
max_num.pop()
if max_num:
answer.append(max_num[-1])
max_num.append(num)
if not max_num:
answer.append(-1)
max_num.append(num)
return list(reversed(answer))
if __name__ == '__main__':
n = int(input())
arr = list(map(int, sys.stdin.readline().rsplit()))
print(*solution())
Leave a comment