๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

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

๋ฟŒ์•ผ._. 2021. 9. 10. 20:30

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ•ด์‹œ


<๋ฒ ์ŠคํŠธ ์•จ๋ฒ”>

๋ฌธ์ œ ์„ค๋ช…

 

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

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

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

 

์ œํ•œ ์‚ฌํ•ญ

 

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

 

 

๋ฌธ์ œ ํ’€์ด

 

 - my solution

def solution(genres, plays):
    answer = []

    dic = {}
    for i in range(len(genres)):
        if genres[i] not in dic:
            dic[genres[i]] = plays[i]
        else:
            dic[genres[i]] += plays[i]
    dic = sorted(dic.items(), key=lambda x: -x[1])  # ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด ์ˆœ

    temp = []
    for i in range(len(genres)):  # list: ์žฅ๋ฅด, ์žฌ์ƒ ํšŸ์ˆ˜, ๊ณ ์œ  ๋ฒˆํ˜ธ
        temp.append([genres[i], plays[i], i])

    temp.sort(key=lambda x: (x[0], -x[1]))  # ์ •๋ ฌ: ์žฅ๋ฅด ์ด๋ฆ„ ์ˆœ, ์žฌ์ƒ ํšŸ์ˆ˜ ์ˆœ

    for i in range(len(dic)):  # ์žฅ๋ฅด๋ณ„๋กœ 2๊ฐœ์”ฉ ๊ณ ์œ  ๋ฒˆํ˜ธ ์ถœ๋ ฅ
        cnt = 0
        for j in range(len(temp)):
            if temp[j][0] == dic[i][0]:
                answer.append(temp[j][2])
                cnt += 1
            if cnt >= 2:
                break

    return answer

 

 

1) ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด: dict๋กœ ๊ฐ ์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ ์ •๋ ฌ

 

2) list: [์žฅ๋ฅด, ์žฌ์ƒ ํšŸ์ˆ˜, ๊ณ ์œ  ๋ฒˆํ˜ธ]

 

3) ์ •๋ ฌ: ์žฅ๋ฅด ์ด๋ฆ„ ์ˆœ, ์žฌ์ƒ ํšŸ์ˆ˜ ์ˆœ

 

4) 1๋ฒˆ์—์„œ ๊ตฌํ•œ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ณ„๋กœ 3๋ฒˆ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ’์„ ๊ตฌํ•จ

- ์ข…๋ฃŒ ์กฐ๊ฑด: 2๊ฐœ์”ฉ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 2๊ฐœ ์ด์ƒ์ด๋ฉด break


์ƒ๊ฐ๐Ÿค”

 

Level 3๋ผ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ์ฝ”๋“œ๋กœ ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ํ›จ์”ฌ ์งง๊ฒŒ ํ‘ผ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ •ํ™•์„ฑ ์žˆ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค. ๐Ÿค”

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ

1) ์ •๋ ฌ


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