๐Ÿงฉ Algorithm/[Programmers] Level 2

[Programmers] L2. ๊ทค ๊ณ ๋ฅด๊ธฐ (Greedy/Python)

devCloud 2024. 11. 16. 01:39
728x90

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

 

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

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

programmers.co.kr


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

1๏ธโƒฃ ๊ทค์˜ ์ข…๋ฅ˜๋ณ„ ๊ฐœ์ˆ˜ ํŒŒ์•…

  • ๊ทค์˜ ํฌ๊ธฐ๋ณ„๋กœ ๋ช‡ ๊ฐœ์”ฉ ์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค. (Counter() ํ•จ์ˆ˜ ์ด์šฉ)
from collections import Counter
tangerine = [1, 3, 2, 3, 2, 4, 4, 4, 4]
print(Counter(tangerine))
  • ์ถœ๋ ฅ ๊ฒฐ๊ณผ : Counter({4: 4, 3: 2, 2: 2, 1: 1})

2๏ธโƒฃ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

  • ๊ทค์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์ด๋Š” ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ์ข…๋ฅ˜๋ถ€ํ„ฐ ์„ ํƒํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • ์œ„ ์˜ˆ์‹œ์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด [(4, 4), (3, 2), (2, 2), (1, 1)] ์ด ๋œ๋‹ค.

3๏ธโƒฃ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ์ข…๋ฅ˜๋ถ€ํ„ฐ ์„ ํƒ

  • ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ทค ์ข…๋ฅ˜๋ถ€ํ„ฐ ์„ ํƒํ•˜์—ฌ k๊ฐœ ์ด์ƒ์˜ ๊ทค์„ ๊ณ ๋ฅด๋Š” ๊ฒƒ์ด ์ตœ์†Œ ์ข…๋ฅ˜๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

4๏ธโƒฃ ํ•„์š”ํ•œ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ

  • ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ์ข…๋ฅ˜๋ถ€ํ„ฐ ์„ ํƒํ•˜๋ฉด์„œ k๊ฐœ ์ด์ƒ์ด ๋˜๋Š” ์‹œ์ ์—์„œ ์„ ํƒํ•œ ๊ทค ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Solution

from collections import Counter
def solution(k, tangerine):
    answer = 0
    tangerine = sorted(Counter(tangerine).items(), key=lambda x: x[1], reverse=True)
    for num, cnt in tangerine:
        if k > 0:
            k -= cnt
            answer += 1
        else: break
    return answer

 

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๊ทค์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐ O(n) (n ์€ ๊ทค ๋ฐฐ์—ด์˜ ๊ธธ์ด)
  • ๊ฐœ์ˆ˜๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ O(mlogm) (m ์€ ๊ทค ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜)
  • ์ข…๋ฅ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ k๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(m)

๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n + mlogm) ์ด๋‹ค.

 


 

728x90