728x90
반응형
https://www.acmicpc.net/problem/11652
문제를 보면 가장 중복이 많은 수를 뽑는게 핵심이다.
접근 아이디어는 다음과 같다.
1. 우선 카드 배열에 정수를 다 입력 받는다.
2. 오름차순으로 정렬한다.
3. 현재 중복된 카드 횟수를 저장할 변수 (dupliCnt)와 지금까지 가장 많이 중복된 카드 횟수를 저장할 변수 (maxDupliCnt)를 선언한다.
4. for문을 돌면서 카드가 중복되면 dupliCnt를 증가시키고 이 값이 maxDupliCnt보다 크면 값들을 교체한다. 이 때 핵심은 중복되지 않은 경우엔 dupliCnt를 0으로 초기화 해야 해당 정수값 부터 다시 중복 횟수를 체크한다.
#include<iostream>
#include<vector>
#include<algorithm>
#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
using namespace std;
int main(void)
{
FastIO;
int N = 0; // 숫자 카드 N장
cin >> N;
vector<long long> card(N, 0);
for (int i = 0; i < N; i++)
{
cin >> card[i];
}
sort(card.begin(), card.end());
long long answer = card[0];
int dupliCnt = 0, maxDupilCnt = 0;
for (int i = 1; i < N; i++)
{
if (card[i] == card[i - 1])
{
dupliCnt++; // 중복 횟수 증가
if (maxDupilCnt < dupliCnt) // 가장 많은 중복 횟수보다 크다면
{
maxDupilCnt = dupliCnt; // 가장 많은 중복 횟수를 바꾸고
answer = card[i]; // 해당 값을 answer로 교체
}
}
else
{
dupliCnt = 0; // 중복이 안됐다면 0으로 초기화해서 카운팅 다시 시작
}
}
cout << answer;
return 0;
}
728x90
반응형
'알고리즘 (C++)' 카테고리의 다른 글
[백준]2018: 수들의 합 5 (0) | 2023.12.05 |
---|---|
[백준]11501번: 주식 (0) | 2023.11.27 |
[백준]15900번: 나무 탈출 (1) | 2023.11.23 |
[백준]16948번: 데스 나이트 (0) | 2023.11.23 |
[백준] 10867번: 중복 빼고 정렬하기 (0) | 2023.11.21 |