본문 바로가기
JAVA/프로그래머스

[Lv.2] 프로그래머스 - 귤 고르기 : Java

by ♡˖GYURI˖♡ 2024. 5. 30.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

문제를 보고 Map을 사용해야겠다! 까지는 떠올렸는데 귤의 개수가 많은 순서대로 정렬할 방법이 떠오르지 않았다.

 

참고한 블로그⬇️

 

[프로그래머스] 귤 고르기(Java, 자바)

귤 고르기해당 문제는 HashMap을 활용해 문제를 해결했습니다.1\. 주어진 배열의 정수를 HashMap의 key값으로 하여 정수의 개수를 저장합니다.2\. 개수로 저장된 value를 ArrayList로 변환해 내림차순으로

velog.io

 

서치해보니 Map에 저장된 value들을 ArrayList로 변환하여 정렬할 수 있다고 한다!

List<Integer> list = new ArrayList<>(map.values());
Collections.sort(list, Collections.reverseOrder());

 

ArrayList 선언 시 map.values()로 넣어주고, 해당 list를 Collections.sort 해주면 된다.

 

 

문제풀이

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int count = 0;
        int num = 0;
        
        Map<Integer, Integer> map = new HashMap<>();
        for (int tan : tangerine) {
            map.put(tan, map.getOrDefault(tan, 0) + 1);
        }
        
        List<Integer> list = new ArrayList<>(map.values());
        Collections.sort(list, Collections.reverseOrder());
        
        for (int val : list) {
            if (num + val >= k) {
                count++;
                break;
            } else {
                num += val;
                count++;
            }
        }
        
        return count;
    }
}

 

  • HashMap에 각 귤의 크기와 개수를 담는다.
  • ArrayList에 map의 value들을 저장한다.
  • 내림차순 정렬한다.
  • list를 하나씩 순회하며
    • 귤의 개수와 해당 리스트의 값을 더했을 때, k와 같거나 커지면 count++ 후 break
    • 아직 k보다 작다면 '귤의 개수 += 해당 리스트의 값'으로 업데이트 후 count++