0. 문제 |
1. 아이디어 |
1) N개의 숫자카드에 적혀 있는 정수들을 arr 배열에 저장하고 sort 함수를 사용해서 정렬한다.
2) 오름차순으로 정렬된 arr 배열에서 어떤 정수가 몇 개가 있는지를 카운트해서 pair 쌍으로 저장한다.
ex) 1이라는 값이 3개가 존재한다면 tmp 배열에 <1, 3>으로 저장한다.
3) tmp 배열에서 second(개수)가 가장 큰 원소의 first(값)을 출력한다.
2. 소스코드 |
#include <iostream>
#include <utility>
#include <algorithm>
long long arr[100000];
std::pair<long long, long long> tmp[100000];
int main()
{
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
int N;
std::cin >> N;
for (int i = 0; i < N; i++)
std::cin >> arr[i];
std::sort(arr, arr + N);
long long cnt = 1, idx1 = 0;
long long st = arr[0];
for (int i = 1; i < N; i++)
{
if (arr[i] == st) cnt++;
else
{
tmp[idx1++] = std::make_pair(st, cnt); // ex) 1이라는 값이 3개가 존재한다면 tmp 배열에 <1,3>으로 저장한다.
st = arr[i];
cnt = 1;
}
}
tmp[idx1] = std::make_pair(st, cnt);
int idx = 0;
int result = tmp[0].second;
for (int i = 1; i < 100000; i++)
{
if (tmp[i].second > result)
{
result = tmp[i].second;
idx = i;
}
}
std::cout << tmp[idx].first;
}
3. 결과 |
4. 피드백 |
-
생각보다 헷갈렸지만 흐음.. 잘한 거 같다!
더보기
(이라고 생각했는데 찾아보니까 <key, value>를 값으로 가지는 map이라는 container가 있었다.. 이걸 사용했으면 훨씬 간단하게 구현이 가능한거 같은데 공부해야겠다!)
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <map>
bool sort_map(std::pair<long long, long long> p1, std::pair<long long, long long> p2)
{
if (p1.second == p2.second) return p1.first > p2.first;
return p1.second < p2.second;
}
int main()
{
int N;
std::cin >> N;
std::map<long long, long long> m;
std::vector<std::pair<long long, long long>> v;
for (int i = 0; i < N; i++)
{
long long input;
std::cin >> input;
m[input]++;
}
std::copy(m.begin(), m.end(), std::back_inserter(v));
std::sort(v.begin(), v.end(), sort_map);
std::cout<<v[v.size()-1].first;
}
성공!
TO DO LIST: MAP Container
'알고리즘 > BOJ' 카테고리의 다른 글
[C/C++] 문자 입력 함수 정리 (0) | 2020.03.30 |
---|---|
[C++] 백준 11004번 - K번째 수 (0) | 2020.03.29 |
[C++] 백준 10989번 - 수 정렬하기 3 (0) | 2020.03.29 |
[C++] 백준 10825번 - 국영수 (0) | 2020.03.28 |
[C++] 백준 10814번 - 나이순 정렬 (0) | 2020.03.28 |