https://school.programmers.co.kr/learn/courses/30/lessons/138476
코딩테스트 연습 > 연습문제 > 귤 고르기
문제 접근
map, stream, iterator를 활용해서 문제를 해결했다.
자바의 Map.Entry, Iterator, Stream을 활용할 줄 알면 아주 간단한 문제였다.
코테에서 자주 나오는 친구들이니 몰랐다면 이번 기회에 익혀두는 걸 추천한다.
다시 생각해 보니까 굳이 stream을 사용하지 않고 map.values()를 사용해서 리스트로 뽑는 방식으로 value 를 활용하는 방식으로 했으면 더 간단했겠네요 ㅠ 이런 풀이도 있구나 참고하는 용도면 좋을듯합니당
map 생성
key: 귤 종류 value: 귤 개수
HashMap<Integer, Integer> map = new HashMap<>();
귤 count & map에 기록
for(int i = 0; i < tangerine.length; i++){
map.put(tangerine[i], map.getOrDefault(tangerine[i], 0) + 1);
}
map 정렬 귤의 개수가 많은 순서대로 정렬 즉 value를 기준으로 내림차순 정렬
map.entrySet(): map 에서 Map.Entry<Integer, Integer> 변환
stream(): Map.Entry<Integer, Integer> stream 데이터로 변환
sorted(): value를 기준으로 내림차순
collect(Collectors.toList()): 정렬해서 나온 결과를 List<Map.Entry<Integer, Integer>>로 변환
iterator(): 해당 리스트를 이터레이터로 변환
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().stream().sorted((o1,o2)->{
return o2.getValue() - o1.getValue();
}).collect(Collectors.toList()).iterator();
핵심 로직 시작
우린 최소한의 귤 종류를 가지고 싶다.
그럼 귤 개수가 가장 많은 귤 종류부터 선택해 나가면 된다.
int answer = 0; // 선택한 귤 종류 count
int cnt = 0; // 선택한 귤 누적 count
while(cnt < k && it.hasNext()){
Map.Entry<Integer, Integer> entry = it.next();
answer++; // 귤 종류 up
cnt += entry.getValue();
}
전체 코드
import java.util.*;
import java.util.stream.*;
class Solution {
public int solution(int k, int[] tangerine) {
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < tangerine.length; i++){
map.put(tangerine[i], map.getOrDefault(tangerine[i], 0) + 1);
}
// 귤의 개수가 많은 순서대로 map 정렬
// map -> Map.Entry<Integer, Integer> -> stream -> 정렬 ->
// List<Map.Entry<Integer, Integer> -> iterator
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().stream().sorted((o1,o2)->{
return o2.getValue() - o1.getValue();
}).collect(Collectors.toList()).iterator();
int answer = 0; // 선택한 귤 종류 count
int cnt = 0; // 선택한 귤 누적 count
while(cnt < k && it.hasNext()){
Map.Entry<Integer, Integer> entry = it.next();
answer++; // 귤 종류 up
cnt += entry.getValue();
}
return answer++;
}
}
- 귤 고르기
- 귤 고르기
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 level2 두 큐 합 같게 만들기 (0) | 2024.07.23 |
---|---|
[JAVA] 프로그래머스 level2 연속 부분 수열 합의 개수 (0) | 2024.07.18 |
[JAVA] 프로그래머스 level2 디펜스 게임 (0) | 2024.07.13 |
[JAVA] 프로그래머스 level2 이모티콘 할인행사 (0) | 2024.07.12 |
[JAVA] 프로그래머스 level2 택배 배달과 수거하기 (0) | 2024.07.07 |