https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 2. 귤 고르기
접근 방식
1. 맵의 귤의 크기(key)와 개수(value)를 저장한다.
2. 맵을 개수(value)를 기준으로 내림차순 정렬한다.
3. for문을 돌면서, 개수를 계속해서 sum에다가 더하다가 k보다 sum의 크기가 커지면 break한다.
-> 이때 반복한 횟수를 return 한다.
처음 코드
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int ans = 0;
List<Integer> list = new ArrayList<>();
for(int n : tangerine) {
list.add(n);
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Integer n : list) {
Integer cnt = map.get(n);
if(cnt == null) {
map.put(n, 1);
}
else {
map.put(n, cnt+1);
}
}
//내림차순 정렬
List<Map.Entry<Integer, Integer>> entryList = new LinkedList<>(map.entrySet());
entryList.sort(new Comparator <Map.Entry<Integer, Integer>>(){
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue()-o2.getValue();
}
});
int rm = 0;
for(Map.Entry<Integer, Integer> entry : entryList) {
// tangerine.length()-k == 판매할 개수 --> 이것만큼 제거하면 됨.
if(rm >= (tangerine.length-k)) {
break;
}
rm+=map.get(entry.getKey());
map.remove(entry.getKey());
}
if(map.size()==0) {
System.out.println("답: "+ 1);
return 1;
}
else {
System.out.println("답: "+ ans);
return map.size();
}
}
}
최종 코드
import java.util.*;
import static java.util.stream.Collectors.*;
class Solution {
public int solution(int k, int[] tangerine) {
int ans = 0;
//맵에 크기와 개수를 저장
Map<Integer, Integer> map = new HashMap<>();
for(int n : tangerine) {
if(map.containsKey(n)==true) {
map.put(n, map.get(n)+1);
}
else {
map.put(n, 1);
}
}
//내림차순 정렬
List<Integer> list = new ArrayList<>(map.keySet());
Collections.sort(list, (value1, value2) -> (map.get(value2).compareTo(map.get(value1))));
int sum = 0;
for(Integer n : list) {
ans++;
sum+=map.get(n);
if(sum>=k) {
break;
}
}
return ans;
}
}
고찰
아무리봐도 나는 자꾸 어렵게 생각하려고 한다. 간단한 방법이 있는데 자꾸 자꾸 자꾸 돌아간다.. 이유를 모르겠다
너무 자괴감이 든다........
맵에 크기와 개수를 저장하고, 맵을 value로 내림차순 정렬 하는 것까지는 당연한 수순으로 했는데 그 후부터 어렵게 생각했던 것 같다. 제발 단순하게 생각하자...
'알고리즘 > Java' 카테고리의 다른 글
[프로그래머스] Java - H Index (0) | 2023.05.02 |
---|---|
[프로그래머스] Java - 멀리 뛰기 (0) | 2023.05.02 |
[프로그래머스] Java - 구명보트 (0) | 2023.04.29 |
[프로그래머스 ] Java - 점프와 순간 이동 (0) | 2023.04.28 |
[프로그래머스] Java - N개의 최소공배수 (0) | 2023.04.28 |