HashMap 이용하기
귤 고르기 : Level2
https://school.programmers.co.kr/learn/courses/30/lessons/138476
풀이
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
HashMap<Integer, Integer> hm = new HashMap<>();
// HashMap을 사용하여 각 종류의 감귤과 해당 종류의 개수를 저장
for (int n : tangerine) {
if (hm.containsKey(n)) {
hm.put(n, hm.get(n) + 1);
} else {
hm.put(n, 1);
}
}
// HashMap의 엔트리를 값에 따라 내림차순으로 정렬
// 이를 위해 List를 사용하고, Collections.reverseOrder와 Map.Entry.comparingByValue를 활용
List<Map.Entry<Integer, Integer>> el = new LinkedList<>(hm.entrySet());
el.sort(Collections.reverseOrder(Map.Entry.comparingByValue()));
// 정렬된 엔트리 리스트를 순회하면서, 남은 수확량 k가 0이 될 때까지 가장 많이 나오는 종류부터 선택하여 수확
for (Map.Entry<Integer, Integer> entry : el) {
if (k > 0) {
int count = Math.min(k, entry.getValue()); // 이때, 해당 종류의 감귤 개수와 남은 수확량 중 작은 값을 선택하여 수확
k -= count;
answer++; // 수확한 종류의 개수를 answer에 추가합니다.
}
}
return answer;
}
}
int count = Math.min(k, entry.getValue());
ㄴ 이걸 해주는 이유는 현재 종류의 감귤이 남은 수확량 k보다 많이 나왔더라도, 모든 감귤을 수확하는 것이 아니라 k만큼만 수확해야 하기 때문이다.
문제점 : 감귤이 남은 수확량 k보다 많을 경우를 고려하지 않아 테스트 케이스 실행에서 계속 실패하였다.
해결 방법 : 감귤이 남은 수확량 k보다 많을 경우를 고려하여 k만큼만 수확하도록 코드를 추가했다.
깨달은 바 : 여러가지 조건을 잘 고려하여 코드를 작성해야겠다.
'코딩테스트 > programming_JAVA' 카테고리의 다른 글
[Java] baekjoon_1966 : 프린터 큐 (0) | 2024.01.04 |
---|---|
[Java] 프로그래머스_138477 : 명예의 전당 (1) (2) | 2024.01.04 |
[Java] baekjoon_1920 : 수 찾기 (1) | 2024.01.03 |
[Java] baekjoon_1874 : 스택 수열 (1) | 2024.01.03 |
[Java] baekjoon_1676 : 팩토리얼 0의 개수 (1) | 2024.01.01 |