https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
단순 해쉬문제입니다.
우선순위큐를 활용하여 가장 많이 플레이한 장르를 알려주고 (우선순위큐 사용안하고 Collections.sort() 를 사용해도됨)
그 장르에서 1순위로 많이 들은 노래, 2순위로 많이 들은 노래를 구해서
리턴하면 됩니다.
코드입니다.
import java.util.*; import java.util.Map.*; class Solution { HashMap<String, Integer> hashmap = new HashMap<>(); PriorityQueue<Genre> pq = new PriorityQueue<Genre>(); ArrayList<Integer> answerarr = new ArrayList<>(); public int[] solution(String[] genres, int[] plays) { int[] answer = {}; for(int i=0;i<genres.length;i++){ hashmap.put(genres[i], hashmap.getOrDefault(genres[i], 0) + plays[i]); } for(Map.Entry<String, Integer> entry : hashmap.entrySet()){ pq.offer(new Genre(entry.getKey(), entry.getValue())); } while(!pq.isEmpty()){ String genretemp = pq.poll().genrename; int maxplaytime = 0; int firstidx = -1; //첫번째로 많이 들었던 음악 찾기 for(int i=0;i<genres.length;i++){ if(genres[i].equals(genretemp)){ if(maxplaytime < plays[i]){ maxplaytime = plays[i]; firstidx = i; } } } answerarr.add(firstidx); //두번쨰로 많이 들었던 음악찾기 maxplaytime = 0; int secondidx = -1; for(int i=0;i<genres.length;i++){ if(genres[i].equals(genretemp) && i != firstidx){ if(maxplaytime < plays[i]){ maxplaytime = plays[i]; secondidx = i; } } } if(secondidx != -1){ answerarr.add(secondidx); } } answer = new int[answerarr.size()]; for(int i=0;i<answerarr.size();i++){ answer[i] = answerarr.get(i); } return answer; } class Genre implements Comparable<Genre>{ String genrename; int playtime; Genre(String genrename, int playtime){ this.genrename = genrename; this.playtime = playtime; } public int compareTo(Genre other){ if(this.playtime < other.playtime){ return 1; }else{ return -1; } } } }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]올바른 괄호 - 스택 (0) | 2023.02.03 |
---|---|
[프로그래머스]기능개발- 구현 (0) | 2023.02.02 |
[프로그래머스][다시풀기]위장 - 해쉬 + 아이디어 (0) | 2023.02.01 |
[프로그래머스]전화번호 목록 - 해쉬 + 아이디어 (0) | 2023.01.28 |
[프로그래머스]이진 변환 반복하기 - 문자열 + StringBuilder (0) | 2023.01.25 |