1. 풀이방법
- 정렬을 하고 , 앞에서부터 쭉 살피면서 연속된 수를 체크하고 교체 및 갱신을 수행한다.
- 값의 범위는 -2^64 ~ 2^64 까지 이므로 대략 10^19정도 이므로 카드의 값은 long long 타입을 사용해주자
- 값을 오름차순으로 정렬을 해준 후 작업을 수행
2. 주의사항
- 첫번째, 값이 달라질때만 갱신작업을 수행하므로 배열의 마지막이 왔을때는 비교작업을 한번 수행해주어야 한다.
- 두번쨰, 카드가 1개일 때를 생각해보면 maxcount=1, resultvalue=cardset[0]로 초기화 하자
(n이 1이면 for 문을 돌지 않으므로 ---> 100% 쯤에서 틀렸습니다가 나오면 이 문제)
- 물론 주의사항은 모두 구현 방식에 따라 다를 수 있습니다.
3. 나의코드
#include<bits/stdc++.h>
using namespace std;
int n;
long long cardset[100001];
int maxcount;
long long resultvalue;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> cardset[i];
}
sort(cardset, cardset + n);
maxcount = 1;
resultvalue = cardset[0];
int tmpcount = 1;
for (int i = 1; i < n; i++) {
if (cardset[i] == cardset[i - 1]) {
tmpcount++;
if (i == n - 1) { //달라질때에만 값을 갱신하므로 , 마지막은 따로 계산해주어야함
if (tmpcount > maxcount) { //같을때는 갱신하지 않는다.
maxcount = tmpcount; resultvalue = cardset[i];
}
}
}
else {
if (tmpcount > maxcount) { //같을때는 갱신하지 않는다.
maxcount = tmpcount; resultvalue = cardset[i - 1];
}
tmpcount = 1; }
}
cout << resultvalue;
return 0;
}
'알고리즘 문제풀이 > 정렬' 카테고리의 다른 글
백준 1620 [C++] (0) | 2021.01.09 |
---|---|
백준 2887 [C++] (0) | 2020.10.27 |
백준 10825 [C++] (0) | 2020.10.25 |
백준 10814 (0) | 2020.03.02 |
백준 1181 (0) | 2020.01.15 |