[μ΄μ½ν Ch14-25] μ€ν¨μ¨ (μ λ ¬)
π©π»π»λ¬Έμ μ€λͺ
[μ΄μ½ν Ch14-25] μ€ν¨μ¨ (μ λ ¬)
βοΈIdea Sketch
λ¬Έμ μμ½
μ€ν¨μ¨ = μ€ν μ΄μ§μ λλ¬νμΌλ μμ§ ν΄λ¦¬μ΄νμ§ λͺ»ν νλ μ΄μ΄μ μ / μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄ μ
μ€ν¨μ¨μ΄ λμ μ€ν μ΄μ§λΆν° λ΄λ¦Όμ°¨μμΌλ‘ μ€ν μ΄μ§μ λ²νΈκ° λ΄κ²¨μλ λ°°μ΄μ return νλΌ.
μκ°λ³΅μ‘λ
μ€ν μ΄μ§μ κ°μ Nμ 500 μ΄νμ΄κ³ , stagesμ κΈΈμ΄λ 200,000 μ΄νμ΄λ€. 500 x 200,000λ 1μ΅μ΄κΈ° λλ¬Έμ μκ°μ΄κ³Όκ° λ κ²μ΄λΌ μμνλ€. νμ§λ§ μκ°μ΄κ³Όκ° λμ§ μμλ€. μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄μ μκ° 0λͺ μΈ κ²½μ°, count()λ₯Ό νμ§ μλλ€. μ΄ μ λλ¬Έμ ν΅κ³Όνλ€κ³ μκ°νλ€.
a.count(x)
리μ€νΈ aμμ xκ° λͺκ° μλμ§ countνλ€. countνκΈ° μν΄ λ¦¬μ€νΈ aλ₯Ό μ 체 νμ ν΄μΌ νλ―λ‘ μκ°λ³΅μ‘λλ O(n)μ΄λ€. stages.count()λ 리μ€νΈ stagesλ₯Ό μ 체 νμνλ€.
sort(), sorted()
νμ΄μ¬μ κΈ°λ³Έ μ λ ¬ λΌμ΄λΈλ¬λ¦¬μΈ sorted()μ sort()ν¨μλ₯Ό μ 곡νλ€. λ³ν© μ λ ¬μ κΈ°λ°μΌλ‘ λ§λ€μ΄μ‘λλ°, λ³ν© μ λ ¬μ μΌλ°μ μΈ κ²½μ° ν΅ μ λ ¬λ³΄λ€ λ리μ§λ§ μ΅μ
μ κ²½μ°μλ μκ° λ³΅μ‘λ O(nlogn)μ 보μ₯νλ€.
μκ³ λ¦¬μ¦ : μ λ ¬
βοΈλ΄ μμ€μ½λ
- clear : μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄ μ
- μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄ μκ° 0λͺ μΈ κ²½μ°, μ€ν¨μ¨μ 0μ΄λ€.
- μ€ν μ΄μ§μ λλ¬ν νλ μ΄μ΄ μκ° 1λͺ μ΄μμΈ κ²½μ°, μμ§ ν΄λ¦¬μ΄νμ§ λͺ»ν νλ μ΄μ΄μ μλ₯Ό count νλ€.
- clearλ₯Ό κ°±μ νλ€. μ§κΈ μ€ν μ΄μ§λ₯Ό ν΄λ¦¬μ΄νμ§ λͺ»ν νλ μ΄μ΄λ λ€μ μ€ν μ΄μ§μ λλ¬νμ리 λ§λ¬΄νλ€.
μ 체 μ½λ
def solution(N, stages):
queue = []
clear = len(stages)
for stage in range(1, N+1):
if clear == 0:
queue.append((0, stage))
else:
fail = stages.count(stage)
queue.append((fail / clear, stage))
clear -= fail
queue.sort(key = lambda x: -x[0])
return [queue[i][1] for i in range(N)]