728x90
#2 Line:18 & Line:35
Collections.sort( [list] , [Comparator] ) -> list.sort( [Comparator] );
이렇게 바꾸니까 더 깔끔한 것 같음
핵심은 Map에서는 value값을 이용한 정렬이 불가능하다는 점
key값으로 정렬하고자 하면 treemap으로 바꾸면됨
그 다음에는 문제가 요구하는 조건들
뭔가 이것 저것 조건들이 있어서 처음 보면 어려워보이는데
뜯어 보면 쉬운 문제들이 자잘자잘하게 붙어 있음
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import java.util.*;
class Solution {
private class Genre{
String genre;
int ptTotal;
List<int[]> top2; // int[0]:인덱스, int[1]:재생시간 (곡 정보)
Genre(String genre){
this.genre = genre;
this.ptTotal = 0;
top2 = new LinkedList<>();
}
void addSong(int idx, int pt){
ptTotal += pt;
top2.add(new int[]{idx, pt});
top2.sort((s1, s2)->(s2[1]-s1[1]));
if(top2.size()>=3)
top2.remove(2);
}
}
public int[] solution(String[] genres, int[] pts) {
Map<String, Genre> gm = new HashMap<>();
for(int i=0; i<genres.length; i++){
String g = genres[i];
Genre curr = gm.getOrDefault(g, new Genre(g));
curr.addSong(i, pts[i]);
gm.put(g, curr);
}
List<Genre> gList = new ArrayList<>(gm.values());
gList.sort((g1, g2)->(g2.ptTotal-g1.ptTotal));
List<Integer> answerList = new ArrayList<>();
for(Genre genre : gList){
for(int[] songArr : genre.top2){
answerList.add(songArr[0]);
}
}
int[] answer = new int[answerList.size()];
for(int i=0; i<answerList.size(); i++)
answer[i] = answerList.get(i);
return answer;
}
}
|
cs |
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import java.util.*;
class Solution {
private class Genre{
String genre;
int ptTotal;
List<int[]> top2; // int[0]:인덱스, int[1]:재생시간 (곡 정보)
Genre(String genre){
this.genre = genre;
this.ptTotal = 0;
top2 = new LinkedList<>();
}
void addSong(int idx, int pt){
ptTotal += pt;
top2.add(new int[]{idx, pt});
Collections.sort(top2, (s1, s2)->(s2[1]-s1[1]));
if(top2.size()>=3)
top2.remove(2);
}
}
public int[] solution(String[] genres, int[] pts) {
Map<String, Genre> gm = new HashMap<>();
for(int i=0; i<genres.length; i++){
String g = genres[i];
Genre curr = gm.getOrDefault(g, new Genre(g));
curr.addSong(i, pts[i]);
gm.put(g, curr);
}
List<Genre> gList = new ArrayList<>(gm.values());
Collections.sort(gList, (g1, g2)->(g2.ptTotal-g1.ptTotal));
List<Integer> answerList = new ArrayList<>();
for(Genre genre : gList){
for(int[] songArr : genre.top2){
answerList.add(songArr[0]);
}
}
int[] answer = new int[answerList.size()];
for(int i=0; i<answerList.size(); i++)
answer[i] = answerList.get(i);
return answer;
}
}
|
cs |
뭔가.. 좀 헷갈렸음 다시 풀어야겠음
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.util.*;
class Solution {
public class Genre{
String genre;
public int playTotal;
List<int[]> top2;
public Genre(String genre){
this.genre = genre;
playTotal = 0;
top2 = new LinkedList<>();
}
public void addSong(int idx, int playTime){
playTotal+=playTime;
top2.add(new int[]{idx, playTime});
Collections.sort(top2, (a,b)->b[1]-a[1]);
}
public int Compare(Genre g1, Genre g2){
return -(g1.playTotal-g2.playTotal);
}
}
public int[] solution(String[] genres, int[] plays) {
Map<String, Genre> gm = new TreeMap<>();
for(int i=0; i<genres.length; i++){
String genre = genres[i];
Genre currGenre = gm.getOrDefault(genre, new Genre(genre));
currGenre.addSong(i, plays[i]);
gm.put(genre, currGenre);
}
List<Integer> res = new ArrayList<>();
List<Genre> list = new ArrayList<>(gm.values());
list.sort((g1,g2)->g2.playTotal-g1.playTotal);
for(Genre g : list){
List<int[]> top2 = g.top2;
int max=2;
for(int[] arr : top2){
res.add(arr[0]);
if(--max<=0) break;
}
}
int[] answer = new int[res.size()];
for(int i=0; i<res.size(); i++)
answer[i] = res.get(i);
return answer;
}
}
|
cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA] 풍선 터뜨리기 (시뮬레이션) (0) | 2021.10.22 |
---|---|
★★ [프로그래머스][JAVA] 입국심사 (이진탐색) #2 (0) | 2021.10.14 |
[프로그래머스][JAVA] 표 편집 (Node) (0) | 2021.09.11 |
[프로그래머스][JAVA] 거리두기 확인하기 (BFS, 완전탐색) (0) | 2021.09.11 |
[프로그래머스][JAVA] 광고 삽입 (string 문자 치환) (0) | 2021.09.11 |