프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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++
'JAVA > 프로그래머스' 카테고리의 다른 글
[Lv.2] 프로그래머스 - 연속 부분 수열 합의 개수 : Java (0) | 2024.05.30 |
---|---|
[Lv.2] 프로그래머스 - 프로세스 : Java (0) | 2024.05.30 |
[Lv.2] 프로그래머스 - 주차 요금 계산 : Java (0) | 2024.05.30 |
[Lv.2] 프로그래머스 - 의상 : Java (0) | 2024.05.24 |
[Lv.2] 프로그래머스 - 행렬의 곱셈 : Java (0) | 2024.05.24 |