정렬을 진행한 후 가장 많이 나오는 값을 찾으면 된다.
정렬 했을 때 중복된 요소들은 인접해있다는 점을 활용하여 문제를 풀면 된다.
인접해있는 값을 비교한 후 같으면 cnt += 1을 한다. 이때 마지막 요소는 for문을 통해 비교가 안되기 때문에 마지막에 따로 계산해줘야한다.
//백준 11652, 카드
#include <iostream>
#include <algorithm>
long long arr[100'000];
int main (){
int N;
std::cin >> N;
for(int i{0}; i<N; ++i) std::cin >> arr[i];
std::sort(arr, arr+N);
int cnt{1}; int max{0}; long long num;
for(int i{1}; i<N; ++i){
if(arr[i-1] == arr[i]) ++cnt;
else{
if(cnt > max){
max = cnt;
num = arr[i-1];
}
cnt = 1;
}
}
if(cnt > max) num = arr[N-1];
std::cout << num;
return 0;
}