[HackerRank/C++] Equalize the Array

2023. 2. 7. 07:50코딩테스트 해커랭크/Algorithms -Easy

배열 arr를 받을때, 같은 값이 가장 많은 값만 남기고, 나머지는 배열에서 삭제할때, 삭제할 배열의 인덱스 갯수를 return 한다

int equalizeArray(vector<int> arr)
{
    int result = 0;
    
    sort(arr.begin(), arr.end());
    int temp = 1;
    
    for (int i = 0; i < arr.size(); ++i)
    {
        if (arr[i] == arr[i + 1])
        {
            ++temp;
        }
        else
        {
            if (result < temp)
            {
                result = temp;
            }
            temp = 1;
        }
    }
    
    return arr.size() - result;
}

가장 같은 값이 많은 숫자의 갯수를 찾기 위한 result 변수를 선언한다

 

이 후 같은 값을 빠르게 찾기 위해 arr 배열을 sort 함수로 정렬시켜 같은 값이 순서대로 올 수 있게 정렬한다

 

같은 값은 자기 자신을 포함해 1개 이상일 테니 temp의 초기값은 1로 정한다

 

arr 배열을 순회하면서 i번째 배열과 그 다음 배열의 값이 같다면 temp의 값을 1 증가시킨다

 

만약 같지 않다면 현재 값과 같은 값을 가진 값이 없다는 뜻이므로 temp가 result보다 크다면 result가 가장 큰 값이므로 갱신해 준다

 

갱신이 되지 않았더라도 이제 같은 값은 없으므로 temp의 값은 1로 초기화 해준다

 

반복문이 끝나고 난 후 result에는 가장 많은 같은 수의 값이 되는데, arr.size()에서 이 값을 빼면 arr에서 지워질 배열의 갯수가 나온다