๐Ÿงฉ Algorithm/[Programmers] Level 2

[Programmers] L1. ๋ช…์˜ˆ์˜ ์ „๋‹น (์ตœ์†Œ ํž™/Python)

devCloud 2024. 11. 16. 02:17

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ’€์ด ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๋ช…์˜ˆ์˜ ์ „๋‹น ์œ ์ง€

  • ๋ช…์˜ˆ์˜ ์ „๋‹น์€ k ๊ฐœ์˜ ์ ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, kk๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ์ œ๊ฑฐ
  • ์šฐ์„ ์ˆœ์œ„ ํ(์ตœ์†Œ ํž™)๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

2๏ธโƒฃ ์ตœํ•˜์œ„ ์ ์ˆ˜ ์ถ”์ถœ

  • ๋งค๋ฒˆ ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ธฐ๋ก

3๏ธโƒฃ ์ ์ˆ˜ ์ฒ˜๋ฆฌ

  • ์ ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉฐ ๋ช…์˜ˆ์˜ ์ „๋‹น์„ ์—…๋ฐ์ดํŠธ
  • ๋ช…์˜ˆ์˜ ์ „๋‹น์ด ๊ฐ€๋“ ์ฐจ๋ฉด ์ตœ์ € ์ ์ˆ˜์™€ ๋น„๊ต ํ›„ ๋Œ€์ฒด

Solution

์ตœ์†Œ ํž™ ๊ตฌํ˜„

import heapq

def solution(k, score):
    hall_of_fame = []  # ๋ช…์˜ˆ์˜ ์ „๋‹น (์ตœ์†Œ ํž™)
    result = []

    for s in score:
        heapq.heappush(hall_of_fame, s)  # ์ ์ˆ˜ ์ถ”๊ฐ€
        if len(hall_of_fame) > k:  # ํฌ๊ธฐ ์ดˆ๊ณผ ์‹œ ์ตœ์†Œ๊ฐ’ ์ œ๊ฑฐ
            heapq.heappop(hall_of_fame)
        result.append(hall_of_fame[0])  # ํ˜„์žฌ ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜ ๊ธฐ๋ก

    return result
  • heapq ์‚ฌ์šฉ
    • ์ตœ์†Œ ํž™์œผ๋กœ ๋ช…์˜ˆ์˜ ์ „๋‹น ์ ์ˆ˜๋ฅผ ๊ด€๋ฆฌ
    • ์ ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ์‹œ ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • result์— ์ตœํ•˜์œ„ ์ ์ˆ˜ ์ถ”๊ฐ€
    • ๋งค์ผ ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์ ์ˆ˜ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ผ ๋•Œ, ์ตœ๋Œ€ O(nlogโกk)

 

๋‹จ์ˆœ ๊ตฌํ˜„

def solution(k, score):
    answer = []
    top = []

    for s in score:
        top.append(s)
        if len(top) > k:  # ๋ช…์˜ˆ์˜ ์ „๋‹น ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ตœ์†Œ๊ฐ’ ์ œ๊ฑฐ
            top.remove(min(top))
        answer.append(min(top))  # ํ˜„์žฌ ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜ ๊ธฐ๋ก

    return answer