๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ•ด์‹œ : ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

by vodkassi 2021. 7. 13.
728x90

 

๋ฌธ์ œ ์„ค๋ช…

 

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

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

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

 


์ œํ•œ ์‚ฌํ•ญ

 

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

 


์ž…์ถœ๋ ฅ ์˜ˆ

 

genres plays return
["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]๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๊ทธ๋‹ค์Œ์— ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

 

 

๋‚˜์˜ ์†”๋ฃจ์…˜

 

def solution(genres, plays):

    genres_dict = {}

    for genre in list(set(genres)):
        genres_dict[genre] = {}
        genres_dict[genre]["songs"] = []
        genres_dict[genre]["total_plays"] = 0

    for i in range(len(genres)):
        genres_dict[genres[i]]["songs"].append([plays[i], i])
        genres_dict[genres[i]]["total_plays"] += plays[i]

    plays_count = []
    for genre in genres_dict.keys():
        plays_count.append([genres_dict[genre]["total_plays"], genre])
        genres_dict[genre]["songs"].sort(reverse=True)
    plays_count.sort(reverse=True)

    answer = []
    for num in plays_count:
        max = genres_dict[num[1]]["songs"]
        try:
            if max[0][0] != max[1][0]:
                answer.extend((max[0][1], max[1][1]))
            elif max[0][0] == max[1][0]:
                answer.extend((max[1][1], max[0][1]))
        except:
            answer.append(max[0][1])

    return answer

 

๋ฐฐ์šด ์ 

 

์˜ค๋ž˜ ์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ผ zip ๋‚˜ counter ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›์‹œ์ ์ธ ์ฝ”๋“œ๊ฐ€ ์˜คํžˆ๋ ค ์ง๊ด€์ ์ด๊ณ , ํ•ด์„์— ๋„์›€์ด ๋œ ์ผ€์ด์Šค์˜€๋‹ค. ๋‹ค์‹œ ์ฝ์–ด๋ณด๋‹ˆ ์ฝ”๋“œ์˜ ๊ฐ ์ค„์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์˜๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…์ด ๋˜๋ฉฐ, ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ์— ์ ‘๊ทผํ•ด ๋‚˜๊ฐ€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. (๋ฐ˜๋Œ€๋กœ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋Š” ๊ฐ€๋…์„ฑ์ด ์กฐ๊ธˆ ๋–จ์–ด์ ธ ๋ณด์ด๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์—ˆ๋‹ค.) ๋•Œ๋กœ๋Š” ์กฐ๊ธˆ ๊ธธ์–ด๋„ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š”๊ฒŒ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค. 

 

(ํ•˜์ง€๋งŒ ์ฃผ์„์€ ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด์„œ๋ผ๋„ ์Šต๊ด€์ ์œผ๋กœ ๋‹ฌ์ž) 

๋Œ“๊ธ€