๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

1. ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

2. ํ’€์ด

1. ์žฅ๋ฅด ์žฌ์ƒํšŸ์ˆ˜ ๋งŽ์€ ์ˆœ์„œ

2. ๋…ธ๋ž˜ ์žฌ์ƒํšŸ์ˆ˜ ๋งŽ์€ ์ˆœ์„œ

3. ๊ณ ์œ ๋ฒˆํ˜ธ ์ž‘์€ ์ˆœ์„œ


map 2๊ฐœ๋ฅผ ๋‘๊ณ 

- ๋…ธ๋ž˜ ์ •๋ณด map (ํ•ด์‹œ๋งต์˜ ํ•ด์‹œ๋งต)

- ์žฌ์ƒํšŸ์ˆ˜ map

 

์žฅ๋ฅด์˜ key๊ฐ’๋งŒ ๋ฝ‘์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•  ๋•Œ, ์ •๋ ฌ ์กฐ๊ฑด์— ์žฅ๋ฅด ์žฌ์ƒํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ ์กฐ๊ฑด ์ถ”๊ฐ€

๋…ธ๋ž˜์˜ key๊ฐ’๋งŒ ๋ฝ‘์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•  ๋•Œ, ์ •๋ ฌ ์กฐ๊ฑด์— ๋…ธ๋ž˜ ์žฌ์ƒํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ ์กฐ๊ฑด ์ถ”๊ฐ€

answer ๋ฆฌ์ŠคํŠธ์— ๊ฐœ์ˆ˜ ๋˜๋Š”๋Œ€๋กœ add (๋‹จ, 2๊ฐœ๊นŒ์ง€)

 

์œ ์˜ํ•  ์ ์€

List<Integer>๋ฅผ int[] ๋กœ ๋งตํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ,

stream๊ณผ mapToInt๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

1. mapToInt ์›๋ฆฌ

2. ํ•ด์‹œ๋งต์—์„œ value๊ฐ€ map ํ˜•ํƒœ๋ฉด putํ–ˆ์„ ๋•Œ ์ด๋ฏธ key๊ฐ€ ์žˆ์–ด๋„ value ์—…๋ฐ์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ค‘๋ณต๋˜๋Š” key์— ์ƒˆ๋กœ์šด value๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”๊ฑด๊ฐ€? value ์•ˆ์˜ key๋„ ์ฒดํฌํ•˜๋Š”๊ฑด๊ฐ€?

 

3. ์ฝ”๋“œ

import java.util.*;
import java.io.*;

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        List<Integer> answer = new ArrayList<> ();
		Map<String, Integer> countMap = new HashMap<> ();
		Map<String, Map<Integer, Integer>> musicMap = new HashMap <> ();
		
		for (int i=0; i<genres.length; i++) {
			if (countMap.containsKey(genres[i])) {
				countMap.put(genres[i], countMap.get(genres[i]) + plays[i]);
				musicMap.get(genres[i]).put(i, plays[i]);
			}
			else {
				Map<Integer, Integer> map = new HashMap<> ();
				map.put(i, plays[i]);
				countMap.put(genres[i], plays[i]);
				musicMap.put(genres[i], map);
			}
		}
		List<String> genreList = new ArrayList<> (countMap.keySet());
		Collections.sort(genreList, (s1, s2) -> countMap.get(s2) - countMap.get(s1));
		for (String genre : genreList) {
			Map<Integer, Integer> music = (HashMap<Integer, Integer>) musicMap.get(genre);
			List<Integer> musicList = new ArrayList<> (music.keySet());
			Collections.sort(musicList, (s1, s2) -> music.get(s2) - music.get(s1));
			
			answer.add(musicList.get(0));
			if (musicList.size() > 1) {
				answer.add(musicList.get(1));
			}
		}
		
		return answer.stream()
				.mapToInt(i->i)
				.toArray();
    }
}

4. ์‚ฌ๋‹ด