diff --git "a/jiwon1217/week13/\352\260\231\354\235\200_\354\210\253\354\236\220\353\212\224_\354\213\253\354\226\264.java" "b/jiwon1217/week13/\352\260\231\354\235\200_\354\210\253\354\236\220\353\212\224_\354\213\253\354\226\264.java" new file mode 100644 index 0000000..24418af --- /dev/null +++ "b/jiwon1217/week13/\352\260\231\354\235\200_\354\210\253\354\236\220\353\212\224_\354\213\253\354\226\264.java" @@ -0,0 +1,27 @@ +package jiwon1217.week13; + +import java.util.ArrayList; +import java.util.List; + +public class 같은_숫자는_싫어 { + /** + * 문제 풀이 + * 1. arr에서 연속된 숫자가 중복되는 부분을 제거하고, 첫 번째 값만 남김 + * 시간 복잡도 + * N: 배열 arr의 크기 + * O(N) + */ + public int[] solution(int[] arr) { + List list = new ArrayList<>(); + list.add(arr[0]); + + for (int i = 1; i < arr.length; i++) { + if (arr[i - 1] != arr[i]) { + list.add(arr[i]); + } + } + int[] answer = list.stream().mapToInt(i -> i).toArray(); + + return answer; + } +} diff --git "a/jiwon1217/week13/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224.java" "b/jiwon1217/week13/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224.java" new file mode 100644 index 0000000..7f9fb6b --- /dev/null +++ "b/jiwon1217/week13/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224.java" @@ -0,0 +1,49 @@ +package jiwon1217.week13; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class 베스트앨범 { + /** + * 문제 풀이 + * 1. 순회하며 장르별 총 재생횟수 계산하고, 장르별 노래 리스트 추가 + * 2. 장르 정렬, 각 장르별 노래 정렬 + * 3. 최대 2곡씩 선택 + * 시간 복잡도 + * N: 장르의 길이 + * O(NlogN) + */ + public int[] solution(String[] genres, int[] plays) { + Map genreTotalPlays = new HashMap<>(); + Map> genreToSongs = new HashMap<>(); + + for (int i = 0; i < genres.length; i++) { + genreTotalPlays.put(genres[i], genreTotalPlays.getOrDefault(genres[i], 0) + plays[i]); + + genreToSongs.computeIfAbsent(genres[i], k -> new ArrayList<>()) + .add(new int[]{i, plays[i]}); + } + List sortedGenres = new ArrayList<>(genreTotalPlays.keySet()); + sortedGenres.sort((a, b) -> genreTotalPlays.get(b) - genreTotalPlays.get(a)); + + List answer = new ArrayList<>(); + + for (String genre : sortedGenres) { + List songs = genreToSongs.get(genre); + + songs.sort((s1, s2) -> { + if (s2[1] != s1[1]) { + return s2[1] - s1[1]; + } + return s1[0] - s2[0]; + }); + + for (int i = 0; i < Math.min(2, songs.size()); i++) { + answer.add(songs.get(i)[0]); + } + } + return answer.stream().mapToInt(i -> i).toArray(); + } +}