๋จผ์ ์๊ฐํ๋ ํ์ด ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
- ๊ฐ ์ฅ๋ฅด์ ๊ฐ์๋ฅผ HashMap์ ๋ด๊ธฐ
classic : 3
pop : 2
- ๊ฐ ์ฅ๋ฅด์ ์ฌ์ ํ์ ํฉ๊ณ๋ฅผ HashMap์ ๋ด๊ณ , ๋ด๋ฆผ์ฐจ์์ผ๋ก sortingํ๊ธฐ
pop : 3100
classic : 1450
pop ์ฅ๋ฅด์ ์ฌ์ ํ์ ํฉ๊ณ๊ฐ ๊ฐ์ฅ ๋ง์ผ๋ฏ๋ก pop ์ฅ๋ฅด ๋ ธ๋์ index๊ฐ ๋จผ์ ์๋ก๋์ด์ผ ํ๋ค. ex) 4, 1
๊ทธ ๋ค์์ผ๋ก classic ์ฅ๋ฅด ๋ ธ๋์ index๊ฐ ์๋ก๋์ด์ผ ํ๋๋ฐ ๊ฐ ์ฅ๋ฅด๋ณ 2๊ฐ์ฉ๋ง ์๋ก๋ ์ ์์ผ๋ฏ๋ก 3, 0์ด ์ฐจ๋ก๋ก ์๋ก๋๊ณ 2๋ ์๋ก๋์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ์จ๋ฒ์ 4, 1, 3, 0 index ์์ผ๋ก ์๋ก๋๋ค.
์ด๋ฅผ ์ํ์ฌ HashMap<String, HashMap<Integer, Integer>> hm = new HashMap<String, HashMap<Integer, Integer>>(); ๋ฅผ ์์ฑํ์๋ค.
key๋ ์ฅ๋ฅด์ด๋ฉฐ, value๊ฐ ๋ HashMap์ธ๋ฐ ์ด HashMap์ key๋ ์ฌ์ํ์์ด๋ฉฐ, value๋ ํด๋น ์ฌ์ํ์์ index์ด๋ค.
์ฌ์ํ์ ํฉ๊ณ๊ฐ ๋์ ์ฅ๋ฅด์ ๋ชจ๋ ์ฌ์ํ์์ ๊ฐ ์ฌ์ํ์์ index๋ฅผ ๋ฃ๊ธฐ ์ํจ์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ inner? HashMap์ ๋ด๋ฆผ์ฐจ์ sortingํด์ฃผ๋ฉฐ, ์์ 2๊ฐ์ index(value)๋ง resultList์ ๋ฃ์ด์ฃผ์๋ค. (1๊ฐ๋ง ์๋ ๊ฒฝ์ฐ๋ 1๊ฐ๋ง ๋ฃ์ด์ค)
public int[] solution(String[] genres, int[] plays) {
//๊ฐ ์ฅ๋ฅด์ ๊ฐ์
HashMap<String, Integer> genreCntMap = new HashMap<String, Integer>();
for (int i=0; i<genres.length; i++) {
genreCntMap.put(genres[i], genreCntMap.getOrDefault(genres[i], 0)+1);
}
//๊ฐ ์ฅ๋ฅด์ ์ฌ์ ํ์ ํฉ๊ณ
HashMap<String, Integer> genreSumMap = new HashMap<String, Integer>();
for (int i=0; i<genres.length; i++) {
genreSumMap.put(genres[i], genreSumMap.getOrDefault(genres[i], 0)+plays[i]);
}
List<Entry<String, Integer>> listEntries = new ArrayList<Entry<String, Integer>>(genreSumMap.entrySet());
Collections.sort(listEntries, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
// ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return obj2.getValue().compareTo(obj1.getValue());
}
});
HashMap<String, HashMap<Integer, Integer>> hm = new HashMap<String, HashMap<Integer, Integer>>();
for (int i=0; i<genres.length; i++) {
HashMap<Integer, Integer> value = null;
if(hm.containsKey(genres[i])) {
value = hm.get(genres[i]);
}else {
value = new HashMap<Integer, Integer>();
}
value.put(plays[i], i);
hm.put(genres[i], value);
}
List<Integer> result = new ArrayList<>();
for(Entry<String, Integer> entry : listEntries) {
List<Entry<Integer, Integer>> order = new ArrayList<Entry<Integer, Integer>>(hm.get(entry.getKey()).entrySet());
Collections.sort(order, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> obj1, Entry<Integer, Integer> obj2) {
// ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return obj2.getKey().compareTo(obj1.getKey());
}
});
result.add(order.get(0).getValue());
if(genreCntMap.get(entry.getKey()) != 1) {
result.add(order.get(1).getValue());
}
}
int[] i = result.stream().mapToInt(Integer::intValue).toArray();
return i;
}
์์ ๋ ์ํ๋ ๊ฒฐ๊ณผ๋๋ก ๋์์ง๋ง ๋ค๋ฅธ ํ ์คํธ ์ผ์ด์ค์์ ์คํจํ์๋ค....
๊ทธ๋ฆฌ๊ณ ํ ์คํธ๊ฐ ๋ชจ๋ ์ฑ๊ณตํด๋ ํจ์จ์ฑ ํ ์คํธ์์ ๋งํ๊ฑฐ๋ผ๊ณ ์๊ฐ์ ํ๊ณ ์์๋ค. ๋ด๊ฐ ์๊ฐํด๋ ๋ณต์กํ๊ธฐ์!
๊ฐ ์ฅ๋ฅด์ ๊ฐ์๋ฅผ HashMap์ ๋ด์ ํ์๊ฐ ์์ ๊ฒ ๊ฐ์ ์ ์ธ์์ผฐ๊ณ , HashMap<String, HashMap<Integer, Integer>> ๋ถ๋ถ์ด ๋๋ฌด ๋ณต์กํ๋ค๊ณ ์๊ฐํด์ Music์ด๋ผ๋ class๋ฅผ ์์ฑํ๊ณ List<Music> resultList๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
class Music{
String genres;
int plays;
int index;
public Music(String genres, int plays, int index) {
this.genres=genres;
this.plays=plays;
this.index=index;
}
}
์ต์ข ์์ค๋ ์๋์ ๊ฐ๋ค.
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
//๊ฐ ์ฅ๋ฅด์ ์ฌ์ ํ์ ํฉ๊ณ
HashMap<String, Integer> genreSumMap = new HashMap<String, Integer>();
for (int i=0; i<genres.length; i++) {
genreSumMap.put(genres[i], genreSumMap.getOrDefault(genres[i], 0)+plays[i]);
}
List<Entry<String, Integer>> listEntries = new ArrayList<Entry<String, Integer>>(genreSumMap.entrySet());
Collections.sort(listEntries, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
//๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return obj2.getValue().compareTo(obj1.getValue()); // ๋ด๋ฆผ์ฐจ์
}
});
List<Music> resultList = new ArrayList<Music>();
for (int i=0; i<listEntries.size(); i++) {
List<Music> tempList = new ArrayList<Music>();
for(int j=0; j<genres.length; j++) {
if(listEntries.get(i).getKey().equals(genres[j])) {
tempList.add(new Music(genres[j], plays[j], j));
}
}
Collections.sort(tempList, new Comparator<Music>() {
@Override
public int compare(Music o1, Music o2) {
//๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return o2.plays - o1.plays;
}
});
resultList.add(tempList.get(0));
if(tempList.size() != 1 ) {
resultList.add(tempList.get(1));
}
}
answer = new int[resultList.size()];
for(int i=0; i<resultList.size(); i++) {
answer[i] = resultList.get(i).index;
}
return answer;
}
'๊ฐ๋ฐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ฐ์ฅ ํฐ ์ - ์ ๋ ฌ (0) | 2022.02.20 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] K๋ฒ์งธ์ - ์ ๋ ฌ (0) | 2022.02.20 |
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์์ฅ - ํด์ (0) | 2022.02.18 |
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ ํ๋ฒํธ ๋ชฉ๋ก - ํด์ (0) | 2022.02.18 |
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์์ฃผํ์ง ๋ชปํ ์ ์ - ํด์ (0) | 2022.02.18 |
๋๊ธ