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 |