https://www.acmicpc.net/problem/11652
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
int N;
cin >> N;
vector<long long> v(N);
for (int i = 0; i < N; ++i)
{
cin >> v[i];
}
// 오름차순 정렬
sort(v.begin(), v.end());
int max_cnt = 1;
int last_cnt = 1;
long long num = v[0];
// 직전 숫자와 비교하여 같은 숫자들 개수 카운팅
for (int i = 1; i < N; ++i)
{
if (v[i - 1] == v[i])
{
++last_cnt;
}
else
{
last_cnt = 1;
}
// max_cnt보다 개수가 많으면 num갱신
if (max_cnt < last_cnt)
{
max_cnt = last_cnt;
num = v[i];
}
}
cout << num;
return 0;
}
map으로 개수를 세는 것보다
정렬로 앞뒤 숫자를 비교하며 중복숫자 개수를 세는게 더 빠르다
map컨테이너는 자동으로 키 값의 정렬을 유지시켜 주는데,
이 말은 map에 데이터를 넣을 때마다 계속해서 정렬동작이 일어난다는 뜻이다.
이 문제에서는 vector로 데이터를 저장하고 마지막에 한번만 정렬을 하는게 더 효율적이다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]1790번: 수 이어 쓰기 2 (c++) (0) | 2020.07.07 |
---|---|
[BOJ]1377번: 버블 소트 (c++) (0) | 2020.07.07 |
[BOJ]2751번: 수 정렬하기 2 (c++) (0) | 2020.07.06 |
[BOJ]10989번: 수 정렬하기 3 (c++) (0) | 2020.07.06 |
[BOJ]10825번: 국영수 (c++) (0) | 2020.07.06 |
댓글