728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
해당 문제는 노래를 기준에 따라 정렬하고 이를 바탕으로 장르별 최대 2곡까지 노래의 고유번호를 저장하는 문제이다.
우선 고유번호는 노래의 전체 재생 수가 많은 장르가 우선적으로 저장된다.
장르 내에서는 각 노래의 재생 수가 많은 노래부터 저장된다.
각 노래의 재생 수가 동일하면 고유번호가 낮은 것부터 저장된다.
이를 만족하기 위해 고유번호를 낮은 번호부터 불러와 딕셔너리에 각 장르별로 분류하고, 전체 재생 횟수도 저장한다.
이후 저장 기준에 따라 딕셔너리들을 정렬하고 고유번호를 추가하면 된다.
- 장르별 노래의 고유번호와 재생 수를 저장할 딕셔너리를 생성한다. d = {}
- 장르별 총 재생 횟수를 저장할 딕셔너리를 생성한다. total = {}
- 노래의 고유번호를 불러오며 for i in range(len(genres))
- 만약 해당 장르가 딕셔너리에 있으면 if (genres[i] in d)
- 해당 장르에 노래의 재생 수와 고유번호를 리스트로 만들어 추가한다. d[genres[i]].append([plays[i], i])
- 반면에 해당 장르가 딕셔너리에 없으면 else
- 해당 장르의 값을 리스트로 하여 노래의 재생 수와 고유번호를 리스트로 저장한다. d[genres[i]] = [[plays[i], i]]
- 만약 해당 장르가 전체 재생 수 딕셔너리에 있으면 if (genres[i] in total)
- 해당 장르에 노래의 재생 수를 더해준다. total[genres[i]] += plays[i]
- 반면에 해당 장르가 딕셔너리에 없으면 else
- 해당 장르에 노래의 재생 수를 저장한다. total[genres[i]] = plays[i]
- 장르별 전체 재생 횟수를 저장한 딕셔너리를 키와 값으로 묶어 리스트로 저장한다. li = list(total.items())
- 전체 재생 횟수를 기준으로 내림차순 정렬한다. li.sort(key = lambda x : x[1], reverse=True)
- 해당 리스트의 원소를 하나씩 불러오며 for i in li
- 해당 장르의 정보를 딕셔너리에서 불러온다. v = d.get(i[0])
- 불러온 정보는 노래의 재생 수와 고유번호를 리스트로 묶은 2차원 리스트의 형태인데, 이를 재생 수를 기준으로 내림차순 정렬을 한다. v.sort(key = lambda x : x[0], reverse=True)
- 노래의 고유번호를 저장할 인덱스 변수를 생성하고 초기화한다. j = 0
- 최대 2개까지 저장 가능하므로 2개 이전이거나, 전체 노래의 개수가 개수보다 크면(추가할 노래가 있으면) 반복한다. while (j < 2) and (len(v) > j)
- 정답 리스트에 노래의 고유번호를 추가한다. answer.append(v[j][1])
- 인덱스를 증가시켜 다음 노래를 불러오도록 한다. j += 1
반응형
3. 소스코드
def solution(genres, plays):
answer = []
d = {}
total = {}
for i in range(len(genres)):
if (genres[i] in d):
d[genres[i]].append([plays[i], i])
else:
d[genres[i]] = [[plays[i], i]]
if (genres[i] in total):
total[genres[i]] += plays[i]
else:
total[genres[i]] = plays[i]
li = list(total.items())
li.sort(key = lambda x : x[1], reverse=True)
for i in li:
v = d.get(i[0])
v.sort(key = lambda x : x[0], reverse=True)
j = 0
while (j < 2) and (len(v) > j):
answer.append(v[j][1])
j += 1
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 연속된 부분 수열의 합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.28 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.26 |
[프로그래머스] 큰 수 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.24 |
[프로그래머스] 삼각 달팽이 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.22 |
[프로그래머스] 쿼드압축 후 개수 세기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.18 |
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.15 |
[프로그래머스] 기지국 설치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.13 |
[프로그래머스] 소수 찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.11 |