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