프로그래머스/해시/베스트앨범
글 작성자: Doublsb
https://programmers.co.kr/learn/courses/30/lessons/42579
풀이
- 장르 별로 가장 많이 재생된 두 곡 모으기
- 가장 많이 재생된 장르 => 장르 내에서 가장 많이 재생된 노래 => 고유 번호가 낮은 노래 먼저 수록
- 해시테이블 안에 장르 클래스를 넣는 것이다
- 장르 클래스에는 재생 횟수, 2개의 노래 클래스가 들어간 리스트가 만들어짐
- 노래 클래스에는 재생 횟수와 고유 번호가 존재한다
- 장르 클래스에서 음악을 재생시킬 때, 재생 횟수를 비교하여 리스트를 갱신한다
- LinQ를 이용하여 장르 클래스의 재생 횟수가 높은 순서대로 수행
- 2개의 노래 클래스에서 각 고유 번호를 리턴한다
C#
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
public Dictionary<string, Genre> DB
= new Dictionary<string, Genre>();
public int[] solution(string[] genres, int[] plays) {
for(int i=0; i<genres.Length; i++){
if(!DB.ContainsKey(genres[i]))
DB.Add(genres[i], new Genre());
DB[genres[i]].Play(new Song(i, plays[i]));
}
List<int> answer = new List<int>();
foreach(var data in DB.Values.OrderByDescending(e => e.PlayCount)){
foreach(var song in data.BestSongs){
answer.Add(song.Number);
}
}
return answer.ToArray();
}
}
public class Genre {
public int PlayCount;
public List<Song> BestSongs;
public Genre(){
PlayCount = 0;
BestSongs = new List<Song>();
}
public void Play(Song song){
PlayCount += song.PlayCount;
int index = Get_IndexOfBestSong(song);
if(index != -1) {
BestSongs.Insert(index, song);
}
if(BestSongs.Count > 2) {
BestSongs.RemoveAt(BestSongs.Count - 1);
}
}
public int Get_IndexOfBestSong(Song song){
for(int i=0; i<BestSongs.Count; i++){
if(BestSongs[i].PlayCount < song.PlayCount){
return i;
}
else if(BestSongs[i].PlayCount == song.PlayCount){
return BestSongs[i].Number > song.Number ? i : i+1;
}
}
return BestSongs.Count;
}
}
public class Song {
public int Number;
public int PlayCount;
public Song(int number, int playcount){
Number = number;
PlayCount = playcount;
}
}
결과
100.0 / 100.0
피드백
어려운 문제는 LinQ 덕분에 아니었음. 하하 LinQ 만세 하하
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스/스택・큐/기능개발 (0) | 2021.08.10 |
---|---|
프로그래머스/위클리 챌린지/상호 평가 (0) | 2021.08.10 |
프로그래머스/해시/위장 (0) | 2021.08.07 |
프로그래머스/해시/전화번호 목록 (0) | 2021.08.06 |
프로그래머스/위클리 챌린지/부족한 금액 계산하기 (0) | 2021.08.06 |
댓글
이 글 공유하기
다른 글
-
프로그래머스/스택・큐/기능개발
프로그래머스/스택・큐/기능개발
2021.08.10 -
프로그래머스/위클리 챌린지/상호 평가
프로그래머스/위클리 챌린지/상호 평가
2021.08.10 -
프로그래머스/해시/위장
프로그래머스/해시/위장
2021.08.07 -
프로그래머스/해시/전화번호 목록
프로그래머스/해시/전화번호 목록
2021.08.06