Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Lv.3
- pccp 기출문제 1번
- Back Tracking
- 백준 c++ 9375번
- Unity
- pccp 기출문제 2번
- 2D슈팅게임
- pccp 기출문제 3번
- C#
- Animation State Machine
- LayerMark
- dp 알고리즘
- 9375번
- 플레이어 이동
- 플레이어 방향전환
- 오브젝트 풀링
- Ainimation Blending
- heap tree
- dfs
- Algorithm
- 유니티
- 연속 펄스 부분 수열의 합
- Blend Type
- 프로그래머스
- 미로 탈출 명령어
- Lv2
- Hp바
- 충돌위험 찾기
- CSharp #자료구조
- 양과 늑대
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.3 베스트앨범 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42579
1. 정답코드 및 핵심 아이디어, 유의사항
조건에 따라 베스트앨범을 순서대로 구하는 문제
1. 가장 많이 재생된 장르
2. 장르 내에서 가장 많이 재생된 노래 2개 (같다면 고유번호가 낮은 노래)
- 가장 많이 재생된 장르를 파악하기 위한 playDict // <장르이름, 플레이횟수>
- 장르 내에서 가장 많이 재생된 노래를 파악하기 위한 genresDict // <장르이름, (고유번호, 재생횟수)>
주석 참조
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution
{
public class DataClass
{
public int num; // 고유 번호
public int playCount; // 재생 횟수
public DataClass(int num, int playCount)
{
this.num = num;
this.playCount = playCount;
}
}
public int[] solution(string[] genres, int[] plays)
{
var answerList = new List<int>();
var genresDict = new Dictionary<string, List<DataClass>>(); // 장르별 데이터묶음
var playDict = new Dictionary<string, int>(); // 장르별 총 재생횟수
// 각 사전에 데이터 세팅
for (int i = 0; i < genres.Length; i++)
{
if (genresDict.ContainsKey(genres[i]) == false)
{
genresDict.Add(genres[i], new List<DataClass>());
playDict.Add(genres[i], 0);
}
genresDict[genres[i]].Add(new DataClass(i, plays[i]));
playDict[genres[i]] += plays[i];
}
// 장르의 개수만큼 반복
for (int i = 0; i < genresDict.Count; i++)
{
// 1. 가장 많이 재생된 장르 추출 후 삭제
string bestGenres = playDict.Aggregate((x, y) => x.Value > y.Value ? x : y).Key;
playDict.Remove(bestGenres);
// 2. 장르 내에서 가장 많이 재생된 노래 2개 수록
var list = genresDict[bestGenres];
if (list.Count != 1)
answerList.Add(list[0].num);
else
{
list.Sort((x, y) => CompareTo(x, y));
answerList.Add(list[0].num);
answerList.Add(list[1].num);
}
}
return answerList.ToArray();
}
// 재생 횟수와 고유 번호에 따라 DataClass를 정렬하는 메서드
public int CompareTo(DataClass d1, DataClass d2)
{
if (d1.playCount == d2.playCount)
return d1.num > d2.num ? 1 : -1;
return d1.playCount < d2.playCount ? 1 : -1;
}
}
'CodingTest > Programmers Lv.3' 카테고리의 다른 글
[프로그래머스 C#] Lv.3 단어 변환 (0) | 2024.03.15 |
---|---|
[프로그래머스 C#] Lv.3 네트워크 (0) | 2024.03.14 |
[프로그래머스 C#] Lv.3 N으로 표현 (0) | 2024.03.11 |
[프로그래머스 C#] Lv.3 야근 지수 (0) | 2024.03.07 |
[프로그래머스 C#] Lv.3 숫자 게임 (0) | 2024.03.06 |