[HackerRank] Equalize the Array

아르당·2023년 11월 23일
0

HackerRank

목록 보기
31/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

정수형 배열이 주어지고, 같은 값의 요소만 남기기 위해 삭제해야 하는 최소 요소의 갯수를 구해라.

Example

arr = [1, 2, 2, 3]

arr = [2, 2]를 남기기 위해 1과 3 2개의 요소를 지워라. 만약 두 개의 2와 1 또는 3을 지운다면, 3개를 지워서 [3] 또는 [1]이 남는다. 최소로 지우게 되는 갯수는 2개이다.

Function Description

equalizeArray 함수를 완성해라.
equalizeArray 함수는 아래와 같은 매개변수를 가지고 있다.

  • int arr[n]: 정수형 배열

Return

  • int: 삭제에 필요한 숫자의 최소 갯수

Constraints

  • 1 <= n <= 100
  • 1 <= arr[i] <= 100

풀이

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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글