문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수형 배열이 주어지고, 같은 값의 요소만 남기기 위해 삭제해야 하는 최소 요소의 갯수를 구해라.
arr = [1, 2, 2, 3]
arr = [2, 2]를 남기기 위해 1과 3 2개의 요소를 지워라. 만약 두 개의 2와 1 또는 3을 지운다면, 3개를 지워서 [3] 또는 [1]이 남는다. 최소로 지우게 되는 갯수는 2개이다.
equalizeArray 함수를 완성해라.
equalizeArray 함수는 아래와 같은 매개변수를 가지고 있다.
Map을 사용해서 풀었는데 for문이 3번이나 사용했다.
먼저 nums를 map으로 생성하고, for문을 통해 nums에 key와 value를 넣어준다. nums에 key가 있다면 value를 증가시키고, 없다면 value에 1을 넣는다.
Map<Integer, Integer> nums = new HashMap<>();
for(int i = 0; i < arr.size(); i++){
if(nums.containsKey(arr.get(i))){
nums.put(arr.get(i), nums.get(arr.get(i)) + 1);
}else{
nums.put(arr.get(i), 1);
}
}
nums에서 가장 큰 값을 가진 key와 value를 쌍으로 가져와야 한다. 그래서 maxKey와 maxValue를 선언한다. for문을 통해 가장 큰 value를 찾아서 maxKey와 maxValue를 할당한다.
int maxKey = 0;
int maxVal = 0;
for(int num: nums.keySet()){
if(nums.get(num) > maxVal){
maxKey = num;
maxVal = nums.get(num);
}
}
반환할 결과값 result를 선언하고 또 for문을 통해 result값을 계산하고 result를 반환한다.
int result = 0;
for(int num : nums.keySet()){
if(num != maxKey){
result += nums.get(num);
}
}
return result;
public static int equalizeArray(List<Integer> arr) {
Map<Integer, Integer> nums = new HashMap<>();
for(int i = 0; i < arr.size(); i++){
if(nums.containsKey(arr.get(i))){
nums.put(arr.get(i), nums.get(arr.get(i)) + 1);
}else{
nums.put(arr.get(i), 1);
}
}
int maxKey = 0;
int maxVal = 0;
for(int num: nums.keySet()){
if(nums.get(num) > maxVal){
maxKey = num;
maxVal = nums.get(num);
}
}
int result = 0;
for(int num : nums.keySet()){
if(num != maxKey){
result += nums.get(num);
}
}
return result;
}