-
[λ°±μ€] 2493 ν with PythonPS 2022. 3. 14. 22:46728x90λ°μν
π BOJ 2493 ν
π‘ 쑰건
μΌμ§μ μμ Nκ°μ λμ΄κ° μλ‘ λ€λ₯Έ νμ μν μ§μ μ μΌμͺ½λΆν° μ€λ₯Έμͺ½ λ°©ν₯μΌλ‘ μ°¨λ‘λ‘ μΈμ°κ³ , κ° νμ κΌλκΈ°μ λ μ΄μ μ‘μ κΈ°λ₯Ό μ€μΉνμλ€.
λͺ¨λ νμ λ μ΄μ μ‘μ κΈ°λ λ μ΄μ μ νΈλ₯Ό μ§νλ©΄κ³Ό νννκ² μν μ§μ μ μΌμͺ½ λ°©ν₯μΌλ‘ λ°μ¬νκ³ ,
νμ κΈ°λ₯ λͺ¨λμλ λ μ΄μ μ νΈλ₯Ό μμ νλ μ₯μΉκ° μ€μΉλμ΄ μλ€.
νλμ νμμ λ°μ¬λ λ μ΄μ μ νΈλ κ°μ₯ λ¨Όμ λ§λλ λ¨ νλμ νμμλ§ μμ μ΄ κ°λ₯νλ€.Nκ³Ό νλ€μ λμ΄κ° μ£Όμ΄μ§ λ, κ°κ°μ νμμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μ΄λ νμμ μμ νλμ§λ₯Ό μμλ΄λ λ¬Έμ .
Nμ 1 μ΄μ 500,000 μ΄ν
νλ€μ λμ΄λ 1 μ΄μ 100,000,000 μ΄νμ μ μ
λ€μ΄λλ―Ήνλ‘κ·Έλλ° μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin n = int(stdin.readline()) data = list(map(int, stdin.readline().split())) stack = [] ans = [0 for _ in range(n)] for i in range(n): while stack: if stack[-1][1] > data[i]: ans[i] = stack[-1][0] + 1 break else: stack.pop() stack.append((i, data[i])) print(*ans)
π μμ λ° μ€νκ²°κ³Ό
μμ
5 6 9 5 7 4
μ€νκ²°κ³Ό
0 0 2 2 4
β¨οΈ λ¬Έμ νμ΄
nμ κΈΈμ΄μ dataλ₯Ό μ°¨λ‘λλ‘ μννλ€.
stackμ΄ λΉ λκΉμ§ while λ¬Έμ ν΅ν΄μ λ°λ³΅νλ©°
stack 맨 λ§μ§λ§ νμ΄ νμ¬ κ²μ¬νλ νλ³΄λ€ κ°μ΄ ν¬λ©΄ νμ¬ κ²μ¬νλ νμ μ€ν 맨 λ§μ§λ§ νμ΄ μ νΈλ₯Ό λ°κ³ μλ€λ λ».
ans[i] μ κ°μ stackμ [-1][0] μμ 1μ λν΄ λ£μ΄μ£Όκ³ while λ°λ³΅λ¬Έμ μ μ§.(3)λ²μ 쑰건μ ν΄λΉνμ§ μλλ€λ©΄ stack 맨 λ§μ§λ§ κ°μ λΊλ€.
while λ¬Έμ΄ λλλ©΄ stackμ (i, data[i])λ₯Ό λ£μ΄μ£Όκ³ λ€μ n λ§νΌ μννλ λ°λ³΅λ¬Έμ μ΄μ΄ μ§ννλ€.
ansμ λ΄μ©μ μΆλ ₯νλ€.
πΎ λλμ
- μ€νμ μ¬μ©νμ¬ νΈλ λ¬Έμ λΌκ³ μκ°μ νμ§ λͺ»νλ€.
- μ μ€νμ νμ©νλμ§ λλ²κΉ νκΈ° μ κΉμ§λ μ΄ν΄λ₯Ό λͺ»νμλ€.
- μ€νμ μ¬μ© λ°©λ²μ΄ λ λ§λ€λ κ²μ λκΌμΌλ©°, μ€νμ λν λ¬Έμ λ₯Ό νλ² λ νμ΄λ΄μΌκ² λ€.
λ°μν'PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 5698 Tautogram with Python (0) 2022.03.16 [λ°±μ€] 3187 μμΉκΈ° κΏ with Python (0) 2022.03.14 [λ°±μ€] 2096 λ΄λ €κ°κΈ° with Python (0) 2022.03.12 [λ°±μ€] 1531 ν¬λͺ with Python (0) 2022.03.12 [λ°±μ€] 1269 λμΉ μ°¨μ§ν© with Python (0) 2022.03.10