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;
}
}
}
}

+ Recent posts