알고리즘/Map

프로그래머스 - 귤 고르기 (자바)

ummchicken 2023. 1. 2. 15:32

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/138476

풀이 참고 : https://devmoony.tistory.com/170

 

 

  1. 귤의 종류와 그 개수들을 HashMap에 저장
  2. 종류가 뭔지 알 필요 없으므로(갯수만 알면 됨), map의 value들을 list에 저장
  3. list를 크기순(갯수순)으로 내림차순 정렬
  4. 개수가 제일 많은 것부터 k 차감
  5. 개수의 종류가 바뀔 때 answer는 1씩 증가
  6. k가 0보다 작거나 같으면 종료
import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;

        Arrays.sort(tangerine);
        Map<Integer, Integer> map = new HashMap<>();

        for(int i = 0; i < tangerine.length; i++) {
            if(map.get(tangerine[i]) == null) map.put(tangerine[i], 1);
            else map.put(tangerine[i], map.get(tangerine[i]) + 1);
        }

        List<Integer> list = new ArrayList<>();
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            list.add(entry.getValue());
        }
        Collections.sort(list, Collections.reverseOrder());

        for(int i = 0; i < list.size(); i++) {
            k -= list.get(i);
            answer++;
            if(k <= 0) break;
        }

        return answer;
    }
}