반응형
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 |