[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ” / ํŒŒ์ด์ฌ / Python
Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ” / ํŒŒ์ด์ฌ / Python

728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿ’กsolutions )

๐Ÿ’ฌ ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜•์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ

๐Ÿ’ฌ total_play_times ๋”•์…”๋„ˆ๋ฆฌ์— ์žฅ๋ฅด๋ณ„ ์ด ์žฌ์ƒํšŸ์ˆ˜๋ฅผ, song_dict์—๋Š” ์žฅ๋ฅด๋ฅผ key๊ฐ’์œผ๋กœ, ๊ฐ ๊ณก๋“ค์˜ ์žฌ์ƒํšŸ์ˆ˜์™€ ๊ณ ์œ ๋ฒˆํ˜ธ(๋‚˜์ค‘์— ์ •๋ ฌํ•  ๊ธฐ์ค€ ์ˆœ์„œ๋กœ)๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ value์— ๋‹ด์•˜๋‹ค.

๐Ÿ’ฌ sort()๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ -> reverse = True๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ, ์ •๋ ฌํ•˜๋Š” ๊ธฐ์ค€์„ lambda๋กœ ํ‘œํ˜„ ๊ณ ์œ ๋ฒˆํ˜ธ๋Š” ์ž‘์€ ๊ฒŒ ๋จผ์ € ๋‚˜์™€์•ผ ํ•˜๋ฏ€๋กœ -์Œ์ˆ˜๋กœ ๋งŒ๋“  ํ›„ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•จ.

๐Ÿ’ฌ ์ž‘๋…„์— ๋™์ผ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(heapq ๋ชจ๋“ˆ ์‚ฌ์šฉ)์œผ๋กœ ํ’€์—ˆ๋˜ ๊ฒŒ ์žˆ์–ด์„œ ์ฐธ๊ณ ์šฉ์œผ๋กœ๐Ÿ‘‡

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ” / ํŒŒ์ด์ฌ / Python / ํ•ด์‹œ

๐Ÿ’ซsolutions ) ๐Ÿ’ฌ defaultdict, heapq ๋ชจ๋“ˆ ์‚ฌ์šฉ ๐Ÿ‘ฉ‍๐Ÿ’ป code ) from collections import defaultdict import heapq def solution(genres, plays): gen = defaultdict(list) cnt = defaultdict(int) for i in rang..

whwl.tistory.com

 

 

๐Ÿ‘จ‍๐Ÿ’ปcode )

def solution(genres, plays):
    total_play_times = {}
    song_dict = {}

    for i in range(len(genres)):
        if genres[i] in total_play_times:
            total_play_times[genres[i]] += plays[i]
        else:
            total_play_times[genres[i]] = plays[i]
        if genres[i] in song_dict:
            song_dict[genres[i]].append((plays[i], i))  # ์žฌ์ƒํšŸ์ˆ˜, ๊ณ ์œ ๋ฒˆํ˜ธ ์ˆœ์œผ๋กœ ์ €์žฅ
        else:
            song_dict[genres[i]] = [(plays[i], i)]
            
    for key, val in song_dict.items():
        song_dict[key] = sorted(song_dict[key], reverse=True, key= lambda x: (x[0], -x[1]))
    
    genre_list =[]
    for key, val in total_play_times.items():
        genre_list.append((val, key))
    genre_list.sort(reverse=True)

    answer = []
    for times, genre in genre_list:
        cnt = 0
        for i in range(len(song_dict[genre])):
            song_index = song_dict[genre][i][1]
            answer.append(song_index)
            cnt += 1
            if cnt == 2:
                break
                
    return answer

 

 

๐Ÿ“Œdescription )

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

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

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

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

  1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
  • plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

genresplaysreturn

["classic", "pop", "classic", "classic", "pop"] [500, 600, 150, 800, 2500] [4, 1, 3, 0]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

classic ์žฅ๋ฅด๋Š” 1,450ํšŒ ์žฌ์ƒ๋˜์—ˆ์œผ๋ฉฐ, classic ๋…ธ๋ž˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ณ ์œ  ๋ฒˆํ˜ธ 3: 800ํšŒ ์žฌ์ƒ
  • ๊ณ ์œ  ๋ฒˆํ˜ธ 0: 500ํšŒ ์žฌ์ƒ
  • ๊ณ ์œ  ๋ฒˆํ˜ธ 2: 150ํšŒ ์žฌ์ƒ

pop ์žฅ๋ฅด๋Š” 3,100ํšŒ ์žฌ์ƒ๋˜์—ˆ์œผ๋ฉฐ, pop ๋…ธ๋ž˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ณ ์œ  ๋ฒˆํ˜ธ 4: 2,500ํšŒ ์žฌ์ƒ
  • ๊ณ ์œ  ๋ฒˆํ˜ธ 1: 600ํšŒ ์žฌ์ƒ

๋”ฐ๋ผ์„œ pop ์žฅ๋ฅด์˜ [4, 1]๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๋จผ์ €, classic ์žฅ๋ฅด์˜ [3, 0]๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๊ทธ๋‹ค์Œ์— ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.




๋ฐ˜์‘ํ˜•