https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
크기의 종류가 최소인 경우를 구하는 문제
for (int i : tangerine) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
for (int i : map.keySet()) {
al.add(map.get(i));
}
al.sort(Collections.reverseOrder())
HashMap을 이용하여 종류별 개수를 구해주었다
그리고 ArrayList에 해당 값들을 넣어주고 내림차순으로 정렬을 해주었다
int cnt = 0;
while (k > 0) {
if (al.isEmpty()) break;
if (al.get(0) > k) {
al.remove(0);
cnt++;
break;
} else {
k -= al.get(0);
al.remove(0);
cnt++;
}
}
이후 ArrayList의 맨 앞부분을 가지고, 그 값이 K보다 작거나 같으면 K에 그 값을 빼주어 남은 개수를 갱신하고 서로 다른 종류의 횟수(cnt)를 증가시켰다
그러다가 값이 K보다 큰 순간 break를 하고 cnt를 정답으로 출력하였다
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
ArrayList<Integer> al = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for (int i : tangerine) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
for (int i : map.keySet()) {
al.add(map.get(i));
}
al.sort(Collections.reverseOrder());
int cnt = 0;
while (k > 0) {
if (al.isEmpty()) break;
if (al.get(0) > k) {
al.remove(0);
cnt++;
break;
} else {
k -= al.get(0);
al.remove(0);
cnt++;
}
}
return cnt;
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 디펜스 게임 (1) | 2024.02.26 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 점 찍기 (0) | 2024.02.19 |
[프로그래머스][JAVA]Lv. 2 - 숫자 카드 나누기 (0) | 2024.01.31 |
[프로그래머스][JAVA]Lv. 2 - 혼자 놀기의 달인 (0) | 2024.01.31 |
[프로그래머스][JAVA]Lv. 2 - 할인 행사 (1) | 2024.01.14 |