Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 프로그래머스 파이썬
- Git
- 더현대서울 맛집
- leetcode
- gs25
- 백준
- Docker
- PYTHON
- Kaggle
- Real or Not? NLP with Disaster Tweets
- 편스토랑 우승상품
- 금융문자분석경진대회
- Baekjoon
- 데이콘
- AI 경진대회
- 파이썬
- 자연어처리
- hackerrank
- ChatGPT
- SW Expert Academy
- 코로나19
- 프로그래머스
- programmers
- github
- 맥북
- dacon
- 우분투
- ubuntu
- 캐치카페
- 편스토랑
Archives
- Today
- Total
솜씨좋은장씨
[Programmers] 해시 : 베스트앨범 (Python) 본문
728x90
반응형

1일 1문제 21일차!
오늘의 문제는 프로그래머스 베스트 앨범 입니다.
코딩테스트 연습 - 베스트앨범 | 프로그래머스
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 play
programmers.co.kr
첫번째 시도
dictionary를 활용해보기로 했습니다.
def solution(genres, plays):
answer = []
if len(genres) > 1:
genres_dic = {genres[0]:[(plays[0], 0)]}
total_plays_dic = {genres[0]:plays[0]}
for i in range(1, len(genres)):
if genres[i] not in genres_dic.keys():
genres_dic[genres[i]] = [(plays[i], i)]
total_plays_dic[genres[i]] = plays[i]
else:
genres_dic[genres[i]].append((plays[i], i))
total_plays_dic[genres[i]] = total_plays_dic[genres[i]] + plays[i]
sorted_play_dic = sorted(total_plays_dic, reverse=True)
for key in sorted_play_dic:
play_time_list = genres_dic[key]
play_time_list = sorted(play_time_list, key=lambda x:(-x[0], x[1]))
if len(play_time_list) >= 2:
for i in range(2):
answer.append(play_time_list[i][1])
else:
for i in range(len(play_time_list)):
answer.append(play_time_list[i][1])
else:
answer.append(0)
return answer

두번째 시도
def solution(genres, plays):
answer = []
genres_dic = {}
total_plays_dic = {}
if len(genres) == 1:
return [0]
else:
for i in range(len(genres)):
if genres[i] not in genres_dic.keys():
genres_dic[genres[i]] = [(plays[i], i)]
total_plays_dic[genres[i]] = plays[i]
else:
genres_dic[genres[i]].append((plays[i], i))
total_plays_dic[genres[i]] = total_plays_dic[genres[i]] + plays[i]
sorted_play_dic = sorted(total_plays_dic, reverse=True)
for key in sorted_play_dic:
play_time_list = genres_dic[key]
if len(play_time_list) >= 2:
play_time_list = sorted(play_time_list, key=lambda x:(-x[0], x[1]))
for i in range(2):
answer.append(play_time_list[i][1])
else:
for i in range(len(play_time_list)):
answer.append(play_time_list[i][1])
return answer

세번째 시도
def solution(genres, plays):
answer = []
genres_dic = {}
total_plays_dic = {}
if len(genres) == 1:
return [0]
else:
for i in range(len(genres)):
if genres[i] not in genres_dic.keys():
genres_dic[genres[i]] = [(plays[i], i)]
total_plays_dic[genres[i]] = plays[i]
else:
genres_dic[genres[i]].append((plays[i], i))
total_plays_dic[genres[i]] = total_plays_dic[genres[i]] + plays[i]
sorted_play_dic = sorted(total_plays_dic, reverse=True)
for key in sorted_play_dic:
play_time_list = genres_dic[key]
play_time_list = sorted(play_time_list, key=lambda x:(-x[0], x[1]))
if len(play_time_list) >= 2:
for i in range(2):
answer.append(play_time_list[i][1])
else:
answer.append(play_time_list[i][1])
return answer

네번째 시도
def solution(genres, plays):
answer = []
genre_total_play = {}
genre_dic = {}
for i in range(len(genres)):
if genres[i] not in genre_dic.keys():
genre_dic[genres[i]] = [(plays[i], i)]
genre_total_play[genres[i]] = plays[i]
else:
genre_dic[genres[i]].append((plays[i], i))
genre_total_play[genres[i]] = genre_total_play[genres[i]] + plays[i]
# print(genre_total_play)
# print(genre_dic)
sorted_total_play = sorted(genre_total_play.items(), key=lambda x: x[1], reverse=True)
print(sorted_total_play)
for key in sorted_total_play:
play_list = genre_dic[key[0]]
play_list = sorted(play_list, key = lambda x : (-x[0], x[1]))
for i in range(len(play_list)):
if i == 2:
break
answer.append(play_list[i][1])
return answer

문제는 정렬시에 items를 붙이지 않고 정렬했던 것이 문제였습니다.
두 번째 런타임 오류때 파악을 했어야했는데 그러지 못한게 아쉬웠던 문제입니다.
SOMJANG/CODINGTEST_PRACTICE
1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.
github.com
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[leetCode] 7. Median of Two Sorted Arrays (Python) (2) | 2020.02.29 |
---|---|
[Programmers] 완전탐색 : 소수 찾기 (Python) (0) | 2020.02.28 |
[Programmers] 스택/큐 : 주식가격 (Python) (0) | 2020.02.26 |
[Programmers] 스택/큐 : 기능개발 (Python) (0) | 2020.02.25 |
[Programmers] 해시 : 전화번호 목록 (Python) (9) | 2020.02.24 |