์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Programmers Level 3 ] ๋ฒ ์ŠคํŠธ ์•จ๋ฒ” (JAVA / ์ž๋ฐ”)

KIMHYEYUN 2021. 10. 1. 15:27
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42579?language=java 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…


์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ


  • genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
  • plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ํ’€์ด


Map์„ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€์—ˆ๋‹คโ€ผ๏ธ

 

1๏ธโƒฃ cntByGenre ๐Ÿ‘‰ ์žฅ๋ฅด๋ณ„ ์žฌ์ƒํšŸ์ˆ˜ ์ €์žฅ ๐Ÿ‘‰ ์žฌ์ƒ ํšŸ์ˆ˜ ์ˆœ์œผ๋กœ ์ •๋ ฌ

2๏ธโƒฃ ๊ฐ ์žฅ๋ฅด ๋ณ„ ๋…ธ๋ž˜ ์ €์žฅ ๐Ÿ‘‰ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ๊ฐ™์œผ๋ฉด ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ ๐Ÿ‘‰ bestAlbum์— ๋…ธ๋ž˜๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ํ•˜๋‚˜๋งŒ, ๋‘˜ ์ด์ƒ์ด๋ผ๋ฉด ๋‘ ๊ฐœ๋ฅผ ์ €์žฅ

์ฝ”๋“œ


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ๋ฒ ์ŠคํŠธ์•จ๋ฒ” {

    public static class Music implements Comparable<Music>{
        String genre;
        int idx;
        int cnt;

        public Music(String genre, int idx, int cnt){
            this.genre = genre;
            this.idx = idx;
            this.cnt = cnt;
        }

        @Override
        public int compareTo(Music o) {
            int result = o.cnt - this.cnt;
            if(result == 0)
                result = this.idx - o.idx;

            return result;
        }
    }
    public static int[] solution(String[] genres, int[] plays) {
        int[] answer;

        // ์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ์ˆœ ์ €์žฅ
        Map<String, Integer> cntByGenre = new HashMap<>();
        for(int i = 0 ; i < genres.length ; i++){
            cntByGenre.put(genres[i], cntByGenre.getOrDefault(genres[i], 0) + plays[i]);
        }

        // ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์œผ๋กœ ์žฅ๋ฅด ์ •๋ ฌ
        List<String> listKeySet = new ArrayList<>(cntByGenre.keySet());
        Collections.sort(listKeySet, (value1, value2) -> (cntByGenre.get(value2).compareTo(cntByGenre.get(value1))));

        // ๊ฐ ์žฅ๋ฅด์—์„œ 1๊ฐœ or 2๊ฐœ ๊ณ ๋ฅด๊ธฐ
        ArrayList<Music> bestAlbum = new ArrayList<>();
        for(String genre : listKeySet){
            ArrayList<Music> list = new ArrayList<>();

            for(int i = 0 ; i < genres.length ; i++){
                if(genre.equals(genres[i])){
                    list.add(new Music(genres[i], i, plays[i]));
                }
            }

            // ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์œผ๋กœ, ๊ฐ™์œผ๋ฉด ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ
            Collections.sort(list);
            bestAlbum.add(list.get(0));

            if(list.size() > 1){
                bestAlbum.add(list.get(1));
            }
        }
        
        answer = new int[bestAlbum.size()];
        for(int i = 0 ; i < bestAlbum.size() ; i++){
            answer[i] = bestAlbum.get(i).idx;
        }
        
        return answer;
    }
    
    public static void main(String[] args) {
        String[] genres = {"classic", "pop", "classic", "classic", "pop"};
        int[] plays = {500, 600, 150, 800, 2500};
        int[] answer = solution(genres, plays);

        for(int a : answer){
            System.out.println(a);
        }
    }
}

 

728x90
๋ฐ˜์‘ํ˜•