https://programmers.co.kr/learn/courses/30/lessons/42579?language=java
๋ฌธ์ ์ค๋ช
์คํธ๋ฆฌ๋ฐ ์ฌ์ดํธ์์ ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋ ๊ฐ์ฉ ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ ค ํฉ๋๋ค. ๋ ธ๋๋ ๊ณ ์ ๋ฒํธ๋ก ๊ตฌ๋ถํ๋ฉฐ, ๋ ธ๋๋ฅผ ์๋กํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ ๋ ธ๋๊ฐ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ์ฌ์ ํ์๊ฐ ๊ฐ์ ๋ ธ๋ ์ค์์๋ ๊ณ ์ ๋ฒํธ๊ฐ ๋ฎ์ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
๋ ธ๋์ ์ฅ๋ฅด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด genres์ ๋ ธ๋๋ณ ์ฌ์ ํ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด plays๊ฐ ์ฃผ์ด์ง ๋, ๋ฒ ์คํธ ์จ๋ฒ์ ๋ค์ด๊ฐ ๋ ธ๋์ ๊ณ ์ ๋ฒํธ๋ฅผ ์์๋๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- genres[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋ ธ๋์ ์ฅ๋ฅด์ ๋๋ค.
- plays[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋ ธ๋๊ฐ ์ฌ์๋ ํ์์ ๋๋ค.
- genres์ plays์ ๊ธธ์ด๋ ๊ฐ์ผ๋ฉฐ, ์ด๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- ์ฅ๋ฅด ์ข ๋ฅ๋ 100๊ฐ ๋ฏธ๋ง์ ๋๋ค.
- ์ฅ๋ฅด์ ์ํ ๊ณก์ด ํ๋๋ผ๋ฉด, ํ๋์ ๊ณก๋ง ์ ํํฉ๋๋ค.
- ๋ชจ๋ ์ฅ๋ฅด๋ ์ฌ์๋ ํ์๊ฐ ๋ค๋ฆ ๋๋ค.
ํ์ด
Map์ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ํ์๋คโผ๏ธ
1๏ธโฃ cntByGenre ๐ ์ฅ๋ฅด๋ณ ์ฌ์ํ์ ์ ์ฅ ๐ ์ฌ์ ํ์ ์์ผ๋ก ์ ๋ ฌ
2๏ธโฃ ๊ฐ ์ฅ๋ฅด ๋ณ ๋ ธ๋ ์ ์ฅ ๐ ์ฌ์ ํ์๊ฐ ๋ง๊ณ , ๊ฐ์ผ๋ฉด ๋ฒํธ๊ฐ ์์ ์์ผ๋ก ์ ๋ ฌ ๐ bestAlbum์ ๋ ธ๋๊ฐ ํ๋๋ผ๋ฉด ํ๋๋ง, ๋ ์ด์์ด๋ผ๋ฉด ๋ ๊ฐ๋ฅผ ์ ์ฅ
์ฝ๋
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ๋ฒ ์คํธ์จ๋ฒ {
public static class Music implements Comparable<Music>{
String genre;
int idx;
int cnt;
public Music(String genre, int idx, int cnt){
this.genre = genre;
this.idx = idx;
this.cnt = cnt;
}
@Override
public int compareTo(Music o) {
int result = o.cnt - this.cnt;
if(result == 0)
result = this.idx - o.idx;
return result;
}
}
public static int[] solution(String[] genres, int[] plays) {
int[] answer;
// ์ฅ๋ฅด๋ณ ์ฌ์ ์ ์ ์ฅ
Map<String, Integer> cntByGenre = new HashMap<>();
for(int i = 0 ; i < genres.length ; i++){
cntByGenre.put(genres[i], cntByGenre.getOrDefault(genres[i], 0) + plays[i]);
}
// ์ฌ์ ํ์๊ฐ ๋ง์ ์์ผ๋ก ์ฅ๋ฅด ์ ๋ ฌ
List<String> listKeySet = new ArrayList<>(cntByGenre.keySet());
Collections.sort(listKeySet, (value1, value2) -> (cntByGenre.get(value2).compareTo(cntByGenre.get(value1))));
// ๊ฐ ์ฅ๋ฅด์์ 1๊ฐ or 2๊ฐ ๊ณ ๋ฅด๊ธฐ
ArrayList<Music> bestAlbum = new ArrayList<>();
for(String genre : listKeySet){
ArrayList<Music> list = new ArrayList<>();
for(int i = 0 ; i < genres.length ; i++){
if(genre.equals(genres[i])){
list.add(new Music(genres[i], i, plays[i]));
}
}
// ์ฌ์ ํ์๊ฐ ๋ง์ ์์ผ๋ก, ๊ฐ์ผ๋ฉด ๋ฒํธ๊ฐ ๋ฎ์ ์์ผ๋ก ์ ๋ ฌ
Collections.sort(list);
bestAlbum.add(list.get(0));
if(list.size() > 1){
bestAlbum.add(list.get(1));
}
}
answer = new int[bestAlbum.size()];
for(int i = 0 ; i < bestAlbum.size() ; i++){
answer[i] = bestAlbum.get(i).idx;
}
return answer;
}
public static void main(String[] args) {
String[] genres = {"classic", "pop", "classic", "classic", "pop"};
int[] plays = {500, 600, 150, 800, 2500};
int[] answer = solution(genres, plays);
for(int a : answer){
System.out.println(a);
}
}
}