문제 링크입니다: https://www.acmicpc.net/problem/11652
적혀 있는 수는 -2^62보다 크거나 같고 2^62보다 작거나 같기 때문에 자료형을 long long으로 해주는 것이 핵심이였습니다.
카드에 적혀있는 숫자를 벡터나 배열에 집어넣고 정렬을 한 뒤, 최대 출현빈도수를 갖는 숫자를 출력해주면 되는 문제였습니다.
비교하는 숫자가 같지 않을 경우 두 가지의 경우를 고려해야합니다.
1. 최대 출현 빈도수를 갱신하는 경우
2. 최대 출현 빈도수를 갱신하지 않는 경우
반면, 비교하는 숫자가 같은 경우에는 현재 숫자의 빈도수를 늘려주면 됩니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<long long> v;
void printCard(void)
{
sort(v.begin(), v.end());
int cnt = 1, maxCnt = 0;
long long card;
for (int i = 1; i < N; i++)
{
//숫자가 달라졌을 때 최대 출현 빈도 수 갱신할 경우
if (v[i - 1] != v[i] && maxCnt < cnt)
{
maxCnt = cnt; //최대 출현 빈도 수 갱신
card = v[i - 1]; //카드 저장
cnt = 1;
}
//숫자가 바뀌었지만 출현 빈도수가 같다면 초기화 X
//문제 조건: 출현 빈도수 같으면 작은 숫자 출력
else if (v[i - 1] != v[i] && maxCnt >= cnt)
cnt = 1;
else
cnt++;
}
//제일 큰 숫자가 제일 많이 출현했을 경우
if (maxCnt < cnt)
card = v[N - 1];
cout << card << endl;
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 속도 향상 위해
cin >> N;
for (int i = 0; i < N; i++)
{
long long num;
cin >> num;
v.push_back(num);
}
printCard();
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 9328번 열쇠 (5) | 2018.07.11 |
---|---|
백준 10814번 나이순 정렬 (2) | 2018.07.11 |
백준 1102번 발전소 (5) | 2018.07.10 |
백준 1021번 회전하는 큐 (0) | 2018.07.10 |
백준 10828번 스택 (0) | 2018.07.10 |