요약
카드 N장을 가지고 있다.가장 많이 가지고 있는 카드의 쓰여 있는 숫자를 출력 하자
CODE
#include <bits/stdc++.h>
using namespace std;
void init(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
int n;
long long arr[100'001];
int main()
{
init();
cin >> n;
for(int i =0; i < n; ++i)cin >> arr[i];
sort(arr, arr+n);
long long mxval = -(1ll << 62)-1;
int mxcnt = 0;
int cnt = 1;
// 1 1 1 2 2
for(int i =1; i <n; ++i){
if(arr[i-1] == arr[i])cnt++;
else {
if(cnt > mxcnt){
mxcnt = cnt;
mxval = arr[i-1];
}
cnt = 1;
}
}
if(cnt > mxcnt) mxval = arr[n-1];
cout << mxval;
return 0;
}
바로 코드 부터 쓴 이유는 답을 봤기 때문이다.
정렬을 하면 배열의 요소에 특징들이 생긴다.
1.같은 수는 붙어 있다.
2. 수가 오름차순/ 내림차순이 된다.
위 특징을 잘 조합해서 사용 하여 문제들을 풀 수 있다.
얻어가야 할 것 들
위에서 말한 것 처럼 배열의 특성들을 생각 할 수 있어야 한다.
1. 같은 수는 붙어 있다.
2. 오름차순 / 내림차순 정렬 되어 있다.
3. (1ll << 62)형변환을 해줘야 한다는 것