간단한 map을 사용한 문제다. 처음 시도에서는 틀렸는데 key값을 string으로 해서 그렇다.
map은 key값을 기준으로 오름차순으로 정렬되는데, string의 경우 "123"이 "5"보다 앞에 있다고 판단한다. 그렇기에 string의 키값을 모두 long long형태로 바꿔서 해결했다.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
void input_card(map<long long, int> &card)
{
long long card_num;
int N, i;
cin >> N;
for (i = 0; i < N; i++)
{
cin >> card_num;
card[card_num]++;
}
/*
for (auto temp : card)
{
cout << temp.first << " : " << temp.second << "\n";
}
*/
return;
}
long long find_answer(map<long long, int>& card)
{
long long answer = 0;
int max = 0;
for (auto temp : card)
{
if (temp.second > max)
{
max = temp.second;
answer = temp.first;
}
}
//만약 횟수가 동일하다면?
/*
map은 키값을 기준으로 오름차순 정렬되므로, 먼저 max값을 갱신한
key값은 다음에 나올 같은 횟수의 key값보다 항상 작다.
그래서 따로 지정을 안해줘도 된다.
틀림...
왜?
키값이 string 형태니까 정렬 또한 string으로 정렬됨
그래서 123이 5보다 먼저 오게 됨!
*/
return answer;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
map<long long, int> card;
input_card(card);
cout << find_answer(card) << "\n";
return 0;
}