๐Ÿงฉ Algorithm/[Programmers] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT

[Programmers/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT] ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

devCloud 2026. 3. 30. 12:22
728x90

[Programmers] ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

Level 3 | #ํ•ด์‹œ #์ •๋ ฌ

1. ๋ฌธ์ œ ์š”์•ฝ

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•œ๋‹ค.

๋…ธ๋ž˜ ์„ ์ • ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด → ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜ → ์žฌ์ƒ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜ ์ˆœ์„œ์ด๋‹ค.

2. ํ•ต์‹ฌ ํฌ์ธํŠธ

  • โœ… ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™”: defaultdict๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ๋ฅด๋ณ„ ์ด ์žฌ์ƒ ์ˆ˜์™€ ๊ณก ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•œ๋‹ค.
  • โœ… ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ: Python์˜ sorted ํ•จ์ˆ˜์™€ lambda๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ์ •๋ ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

3. ๊ตฌํ˜„ ์ฝ”๋“œ (Python)

from collections import defaultdict

def solution(genres, plays):
    play_count = defaultdict(int)
    genre_songs = defaultdict(list)  # ์žฅ๋ฅด๋ณ„ ๊ณก ๊ทธ๋ฃนํ•‘

    # 1. ํ•œ ๋ฒˆ์˜ ์ˆœํšŒ๋กœ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ
    for i, (genre, play) in enumerate(zip(genres, plays)):
        play_count[genre] += play
        genre_songs[genre].append((play, i))

    # 2. ์žฅ๋ฅด ์ •๋ ฌ (์ด ์žฌ์ƒ ์ˆ˜ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ)
    sorted_genres = sorted(play_count, key=lambda x: play_count[x], reverse=True)

    answer = []
    # 3. ์žฅ๋ฅด๋ณ„ ์ƒ์œ„ 2๊ณก ์ถ”์ถœ
    for genre in sorted_genres:
        # ์žฌ์ƒ ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ(-x[0]), ์ธ๋ฑ์Šค ์˜ค๋ฆ„์ฐจ์ˆœ(x[1])
        sorted_songs = sorted(genre_songs[genre], key=lambda x: (-x[0], x[1]))
        for play, i in sorted_songs[:2]:
            answer.append(i)

    return answer

๐Ÿ“Œ ๋™์‹œ ์ƒ์„ฑ: play_count๋Š” ์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ํ•ฉ๊ณ„๋ฅผ, genre_songs๋Š” ๊ณก ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๐Ÿ“Œ ๋‹ค์ค‘ ์ •๋ ฌ: key=lambda x: (-x[0], x[1])์™€ ๊ฐ™์ด ํŠœํ”Œ์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ธฐ์ค€์ด ๊ฐ™์„ ๋•Œ ๋‘ ๋ฒˆ์งธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

4. ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

# play_count ์˜ˆ์‹œ

{'pop': 3100, 'classic': 1450}

# genre_songs ์˜ˆ์‹œ

{'classic': [(500, 0), (150, 2), (800, 3)], 'pop': [(600, 1), (2500, 4)]}

728x90