ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ด์ฝ”ํ…Œ 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)]