<베스트 앨범>
문제(출처: https://school.programmers.co.kr/learn/courses/30/lessons/42579)
문제 풀이
- 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
'🌞Algorithm > 🔥programmers' 카테고리의 다른 글
| [programmers] 순위 검색 - 2021 KAKAO BLIND RECRUITMENT (0) | 2021.09.14 |
|---|---|
| [programmers] 네트워크 (0) | 2021.09.13 |
| [programmers] 방문 길이 - Summer/Winter Coding(~2018) (1) | 2021.09.09 |
| [programmers] [3차] n진수 게임 - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.09.08 |
| [programmers] 괄호 회전하기 - 월간 코드 챌린지 시즌2 (0) | 2021.09.07 |