문제
해당 문제는 HashMap을 활용해 문제를 해결했습니다.
1. 주어진 배열의 정수를 HashMap의 key값으로 하여 정수의 개수를 저장합니다.
2. 개수로 저장된 value를 ArrayList로 변환해 내림차순으로 정렬합니다.
3. 탐색을 진행하며 귤의 개수가 K 미만이라면 현재 사용한 특정 크기의 귤을 카운트합니다.
4. 탐색을 진행하며 귤의 개수가 K 이상이라면 탐색을 종료하고 카운트한 값을 정답처리합니다.
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int sum = 0; // 고를 귤의 개수
int cnt = 0; // 최솟값 카운트
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int num : tangerine) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
ArrayList<Integer> valueList = new ArrayList<>(map.values());
Collections.sort(valueList, Collections.reverseOrder());
for (int v : valueList) {
if (sum + v >= k) {
cnt++;
break;
} else {
sum += v;
cnt++;
}
}
return cnt;
}
}
✏️ TIP
1 .getOrDefault
를 활용하여 값이 없으면 0, 있으면 + 1을 진행하여 HashMap에 저장합니다.
2. hashMap.values()
를 활용해 HashMap의 value값만 도출합니다.
3. Collections.sort(valueList, Collections.reverseOrder())
에서 Collections.reverseOrder()
를 활용해 내림차순 정렬을 진행합니다.
피드백 및 개선점은 댓글을 통해 알려주세요😊