[ BAEKJOON ] ν / 2493 / Python
λ¬Έμ
KOI ν΅μ μ°κ΅¬μλ λ μ΄μ λ₯Ό μ΄μ©ν μλ‘μ΄ λΉλ° ν΅μ μμ€ν κ°λ°μ μν μ€νμ νκ³ μλ€. μ€νμ μνμ¬ μΌμ§μ μμ Nκ°μ λμ΄κ° μλ‘ λ€λ₯Έ νμ μν μ§μ μ μΌμͺ½λΆν° μ€λ₯Έμͺ½ λ°©ν₯μΌλ‘ μ°¨λ‘λ‘ μΈμ°κ³ , κ° νμ κΌλκΈ°μ λ μ΄μ μ‘μ κΈ°λ₯Ό μ€μΉνμλ€. λͺ¨λ νμ λ μ΄μ μ‘μ κΈ°λ λ μ΄μ μ νΈλ₯Ό μ§νλ©΄κ³Ό νννκ² μν μ§μ μ μΌμͺ½ λ°©ν₯μΌλ‘ λ°μ¬νκ³ , νμ κΈ°λ₯ λͺ¨λμλ λ μ΄μ μ νΈλ₯Ό μμ νλ μ₯μΉκ° μ€μΉλμ΄ μλ€. νλμ νμμ λ°μ¬λ λ μ΄μ μ νΈλ κ°μ₯ λ¨Όμ λ§λλ λ¨ νλμ νμμλ§ μμ μ΄ κ°λ₯νλ€.
μλ₯Ό λ€μ΄ λμ΄κ° 6, 9, 5, 7, 4μΈ λ€μ― κ°μ νμ΄ μν μ§μ μ μΌλ ¬λ‘ μ μκ³ , λͺ¨λ νμμλ μ£Όμ΄μ§ ν μμμ λ°λ λ°©ν₯(μΌμͺ½ λ°©ν₯)μΌλ‘ λμμ λ μ΄μ μ νΈλ₯Ό λ°μ¬νλ€κ³ νμ. κ·Έλ¬λ©΄, λμ΄κ° 4μΈ λ€μ― λ²μ§Έ νμμ λ°μ¬ν λ μ΄μ μ νΈλ λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ΄ μμ μ νκ³ , λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄, λμ΄κ° 5μΈ μΈ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄ μμ μ νλ€. λμ΄κ° 9μΈ λ λ²μ§Έ νκ³Ό λμ΄κ° 6μΈ μ²« λ²μ§Έ νμ΄ λ³΄λΈ λ μ΄μ μ νΈλ μ΄λ€ νμμλ μμ μ νμ§ λͺ»νλ€.
νλ€μ κ°μ Nκ³Ό νλ€μ λμ΄κ° μ£Όμ΄μ§ λ, κ°κ°μ νμμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μ΄λ νμμ μμ νλμ§λ₯Ό μμλ΄λ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫째 μ€μ νμ μλ₯Ό λνλ΄λ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 1 μ΄μ 500,000 μ΄νμ΄λ€. λμ§Έ μ€μλ Nκ°μ νλ€μ λμ΄κ° μ§μ μμ λμΈ μμλλ‘ νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. νλ€μ λμ΄λ 1 μ΄μ 100,000,000 μ΄νμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ£Όμ΄μ§ νλ€μ μμλλ‘ κ°κ°μ νλ€μμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μμ ν νλ€μ λ²νΈλ₯Ό νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μΆλ ₯νλ€. λ§μ½ λ μ΄μ μ νΈλ₯Ό μμ νλ νμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
5
6 9 5 7 4
μμ μΆλ ₯ 1
0 0 2 2 4
λμ νμ΄
μ²μμ λ¬Έμ λ₯Ό 보μλ§μ λκ² λ¨μν λ‘μ§μΌλ‘ νλ¦¬κ² λ€κ³ μκ°μ νλ€. λ¬Έμ κ° λ¨μνμ¬ λ°°μ΄μ κ±°κΎΈλ‘ λλ €μ ν΄λΉ μΈλ±μ€λ³΄λ€ μμ μΈλ±μ€λ₯Ό νμνλ©° μμ λ³΄λ€ ν° μΈλ±μ€ λ²νΈ + 1 μ μΆλ ₯νλ©΄ λκ² λ€κ³ μκ°νλ€.
νμ§λ§, Nκ°μ΄ 500,000μΌλ‘ κ·Έλ κ² λλ©΄ forλ¬Έμ λ λ² λλ κ²κ³Ό κ°μ μκ° λ³΅μ‘λκ° O(n^2) μΌλ‘ μκ° μ΄κ³Όκ° λκ² λλ€.
μ΅μ ννμ¬ νκΈ° μν΄ μ€νμ λμ νμ¬ νμ΄μΌ νλλ°, μκ°μ΄κ³Όλ₯Ό ν΄κ²°ν μ μμ΄μ λ―Όμ¬λμ λμμ λ°μ νμλ€!
λ‘μ§
stackμλ κ°μ₯ ν° νλ€μ ν¬κΈ°λΆν° μμ μμΌλ‘ λ°°μ΄μ΄ λλλ‘ μμ κ²μ΄λ€.
κ·Έλ¬λ©΄ νμ¬ λμ ν ν¬κΈ°μ λΉκ΅νμ¬ λλ³΄λ€ λμ νμ λ°λ‘ μ°Ύμ μ μμ κ²μ΄λ€.
μλ₯Ό λ€μ΄, 6 9 5 7 4 λΌλ νμ ν¬κΈ°κ° μ£Όμ΄μ§ λ, μ΅μ’ μ μΌλ‘ stackμλ 9 7 μ΄ λ€μ΄μμ κ²μ΄λ€.
μ²μ²ν λ¨κ³λ₯Ό μννλ©΄μ μ κ·Όν΄λ³΄μ.
μ£Όμ΄μ§ νμ ν¬κΈ°μ 첫λ²μ§Έ μΈλ±μ€λΆν° λ§μ§λ§ μΈλ±μ€λ‘ μ κ·Όν κ²μ΄λ€.
[ νμ¬ ν - 6 ]
νμ¬ νμ΄ 6μ΄λΌκ³ ν λ, STACK μ΄ λΉμ΄μμΌλ―λ‘ νμ¬ λ΄κ° κ°μ₯ λμ νμ ν¬κΈ°κ° λλ€.
STACK | 6 | ||||
ANSWER | 0 |
STACKμλ νμ¬ μμ μμ κ°μ₯ ν° νλ€μ΄ μμ°¨μ μΌλ‘ λ€μ΄κ° ν λ νμ¬ νμ ν¬κΈ°λ₯Ό μ μ₯ν΄μ€λ€. νμ¬λ³΄λ€ ν° νμ΄ μΌμͺ½μ μ‘΄μ¬νμ§ μμΌλ λ΅μλ λΉμ°ν 0μ΄ λ€μ΄κ° κ²μ΄λ€.
[ νμ¬ ν - 9 ]
STACKμ λ§μ§λ§λΆν° μ‘°μ¬νμ¬ λλ³΄λ€ ν° νμ΄ μ‘΄μ¬νλμ§ νμΈν΄λ³΄μ.
νμ¬ STACKμ 6μ νμ¬ ν ν¬κΈ° 9λ³΄λ€ μμΌλ―λ‘ 6μ΄λΌλ νμ μ΄νμ λμ€λ κ°λ€μ λΉκ΅ λμμ΄ λ μ μλ€.
STACK | |||||
ANSWER | 0 |
6μ STACKμμ μ κ±°νκ³ , νμ¬ ν ν¬κΈ°μΈ 9λ₯Ό STACKμ λ£μ΄μ€λ€.
STACK | 6 | ||||
ANSWER | 0 | 0 |
μ΄λ ANSWERμλ νμ¬λ³΄λ€ ν° νμ΄ μΌμͺ½μ μ‘΄μ¬νμ§ μμΌλ 0μ΄ λ€μ΄κ° κ²μ΄λ€.
[ νμ¬ ν - 5 ]
νμ¬μ 5μ STACKμ μ μ₯λμ΄ μλ κ°μ₯ ν° ν 9μ λΉκ΅νλ€. 9κ° λ ν¬κΈ° λλ¬Έμ λ΅μλ 9μ μΈλ±μ€ κ°μΈ 2κ° λ€μ΄κ°κ³ , νμ¬μ ν ν¬κΈ°κ° STACKμ μ μ₯λλ€.
STACK | 9 | 5 | |||
ANSWER | 0 | 0 | 2 |
[ νμ¬ ν - 7 ]
νμ¬ νμ ν¬κΈ°μΈ 7κ³Ό λ§μ§λ§μΌλ‘ ν° νμ ν¬κΈ° 5λ₯Ό λΉκ΅νμμ λ, νμ¬ λμ νμ΄ λ ν¬κΈ° λλ¬Έμ 5λ λμ΄μ λΉκ΅ λμμ΄ λ μ μλ€. 5λ₯Ό STACKμμ μ κ±°ν΄μ€λ€.
STACK | 9 | ||||
ANSWER | 0 | 0 | 2 |
κ·Έλ€μ 9μ λΉκ΅νμμ λ, νμ¬ λλ³΄λ€ ν° νμ΄ μ‘΄μ¬νκΈ° λλ¬Έμ ANSWERμλ 9μ μμΉ κ°μΈ 2κ° λ€μ΄κ°λ€.
STACK | 9 | ||||
ANSWER | 0 | 0 | 2 | 2 |
μΆκ°λ‘ νμ¬ νμ ν¬κΈ°κΉμ§ STACKμ μμμ€λ€.
STACK | 9 | 7 | |||
ANSWER | 0 | 0 | 2 | 2 |
[ νμ¬ ν - 4 ]
λ§μ§λ§ νμ¬ νμ ν¬κΈ°μΈ 4μ λΉκ΅νμμ λ, 7μ΄ λ ν¬κΈ° λλ¬Έμ ANSWERμ 7μ μμΉ κ°μΈ 4κ° λ€μ΄κ°κ² λλ€.
STACK | 9 | 7 | |||
ANSWER | 0 | 0 | 2 | 2 | 4 |
⇒ κ²°λ‘ μ μΌλ‘λ STACKμλ μ€λ₯Έμͺ½μΌλ‘ κ° μλ‘ κ°μ₯ ν° νμμ μμ νμ΄ λλ μλ§ μ λ ¬μ΄ λλ€κ³ μκ°νλ©΄ λλ€.
μ½λ
μμ λ‘μ§μ μ½λλ‘ λνλ λ, STACKμ μ μ₯λλ κ°μ INDEXλ‘ μ μ₯νμ¬ ANSWERμ λ£λ κ°κ³Ό νμ ν¬κΈ° λΉκ΅λ₯Ό μ½κ² νλ€.
n = int(input())
lst = list(map(int, input().split()))
stack = []
answer = []
for idx, value in enumerate(lst):
if stack == []:
stack.append(idx)
answer.append(0)
else:
while stack:
if lst[stack[-1]] > value:
answer.append(stack[-1] + 1)
stack.append(idx)
break
else:
stack.pop()
else:
stack.append(idx)
answer.append(0)
for ans in answer:
print(ans, end=' ')
[ λμ μ€λ΅.. μΉκ΅¬λ€.. ]
n = int(input())
lst = list(map(int, input().split()))
beforeLength = 0
mxLength = 0
answer = list()
for i in range(n):
if lst[i] > beforeLength:
if lst[i] < mxLength:
# κ·Έ μ νμ
for j in range(i - 1, -1, -1):
if lst[i] < lst[j]:
answer.append(j + 1)
else:
answer.append(0)
else:
answer.append(i)
beforeLength = lst[i]
if mxLength < lst[i]:
mxLength = lst[i]
for i in range(n):
print(answer[i], end=' ')
→ μκ° μ΄κ³Ό!
n = int(input())
lst = list(map(int, input().split()))
stack = []
answer = []
for idx, value in enumerate(lst):
if stack == []:
stack.append(idx)
answer.append(0)
else:
for i in range(-1, -len(stack)-1, -1):
if lst[stack[i]] > value:
answer.append(stack[i] + 1)
stack.append(idx)
break
else:
answer.append(0)
stack = [idx]
for ans in answer:
print(ans, end=' ')
→ μκ° μ΄κ³Ό!