파이썬 μ•Œκ³ λ¦¬μ¦˜

[μ΄μ½”ν…Œ Ch14-25] μ‹€νŒ¨μœ¨ (μ •λ ¬)

은진 2022. 4. 5. 18:10

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ…

[μ΄μ½”ν…Œ 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)]