본문 바로가기

알고리즘/Hackerrank

Equalize the Array

반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Complete the equalizeArray function below.
int equalizeArray(vector<int> arr) {
    int maxCount = 1;
    int maxNum = arr[0];
    int tempCount = 1;
    int tempMax = arr[0];
    
    sort(arr.begin(), arr.end());
    
    for(int i = 0; i < arr.size() - 1; i++) {
        if(arr[i] == arr[i + 1]) {
            tempCount++;
            tempMax = arr[i];
            if(tempCount >= maxCount) {
                maxNum = tempMax;
                maxCount = tempCount;
            }
        } else {
            tempCount = 1;
            tempMax = arr[i + 1];
        }
    }
    
    return arr.size() - maxCount;
 
}
 
 
cs


이 문제는 배열에 들어있는 값들이 모두 같은 값들로만 이뤄져있게 나머지 원소들을 지우는 최소한의 횟수를 output값으로 내는 문제이다.


해결하는 알고리즘은 중복되는 숫자들 중 가장 많은 숫자로 이뤄져있는 숫자의 개수를 세서 그 값을 전체 숫자의 개수와 빼는 것이다. 먼저 배열에 들어있는 원소들이 순서대로 정렬될 수 있도록 sort함수를 실행한다. 그 이유는 같은 원소들끼리 묶일 수 있도록 하는 것이다.

그 이후에 같은 값들의 개수를 세면된다. 하지만 앞에 셌던 값보다 양이 더 많은 수가 있을 수 있기 때문에 항상 비교를 한다.


그리고 마지막에는 배열에 저장되어있는 숫자들의 개수와 가장 많은 중복된 개수를 가진 숫자의 양을 빼주면 답이 된다.


'알고리즘 > Hackerrank' 카테고리의 다른 글

Hackerrank - Taum and B'day  (0) 2018.10.21
Jumping on the Clouds  (0) 2018.10.11
ACM ICPC Team  (0) 2018.10.10
A very big sum  (0) 2018.10.09
Compare the Triplets  (0) 2018.10.09