Algorithms/Programmers

ํ•ด์‹œ lv3. ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

ํƒฑ์ ค 2021. 2. 26. 16:58

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges

 

๋ฌธ์ œ ์„ค๋ช…

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

  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):
    answer = []
    dict_music = {}
    dict_rank = {}
    for i in range(len(genres)):
        if genres[i] in dict_music:
            dict_music[genres[i]].append((plays[i], i))
            dict_rank[genres[i]] += plays[i]
        else:
            dict_music[genres[i]] = [(plays[i], i)]
            dict_rank[genres[i]] = plays[i]
    dict_rank = sorted(dict_rank.items(), key=lambda x: x[1], reverse=True)
    for key in dict_rank:
        chk = 0
        dict_music[key[0]] = sorted(dict_music[key[0]], key = lambda x : (-x[0], x[1]))
        for i in dict_music[key[0]]:
            answer.append(i[1])
            chk += 1
            if chk == 2:
                break
    return answer

# input
# genres = ["classic", "pop", "classic", "classic", "pop"]    
# plays = [500, 600, 150, 800, 2500]

# output ์žฅ๋ฅด๋ณ„๋กœ ๋“ค์€ ํšŸ์ˆ˜ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ 2๊ฐœ index ์ถœ๋ ฅ 
# [4, 1, 3, 0]

# dict_music --> index์™€ ํ•จ๊ป˜ ํŠœํ”Œ๋กœ ์‚ฌ์ „ value ๋‹ด๊ธฐ
# dict_rank --> ํ”Œ๋ ˆ์ด ํšŸ์ˆ˜ ํ•ฉํ•œ ๊ฐ’ ๋„ฃ๊ธฐ
# sorted, lambda๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ

- ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜• ํŒŒ์•…

- ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌํ•˜๊ธฐ

- lambda ํ™œ์šฉํ•˜๊ธฐ


lambda๋กœ ์ •๋ ฌ ์ฐธ๊ณ : dailyheumsi.tistory.com/67 

 

ํŒŒ์ด์ฌ ์ •๋ ฌ, ๋‹ค์ค‘ ์กฐ๊ฑด์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๊ธฐ.

ํŒŒ์ด์ฌ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด, ์—ฌ๋Ÿฌ ์กฐ๊ฑด์œผ๋กœ ์†ŒํŒ…์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์†ŒํŒ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด sorted() ํ˜น์€ .sort() ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted()..

dailyheumsi.tistory.com

velog.io/@k904808/Lambda-%ED%91%9C%ED%98%84%EC%8B%9D..-%EC%9C%BC%EC%9C%BC%EC%9C%BC

 

Lambda ํ‘œํ˜„์‹.. ์œผ์œผ์œผ๐Ÿ˜ฌ

lambda ์ธ์ž : ๋ฆฌํ„ด ๊ฐ’ ์˜ ํ˜•ํƒœ๋ฅผ ์ง€๋‹ˆ๋Š” ์ต๋ช…(์ด๋ฆ„์ด ์—†๋Š”) ํ•จ์ˆ˜.ํ•จ์ˆ˜๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ๋„ฃ์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.์ด๋ ‡๊ฒŒ ์ด๋ฆ„์ง€์–ด์„œ ๋งŒ๋“œ๋žด, ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋žด ์†์ด ๋งŽ

velog.io

 

728x90