https://www.acmicpc.net/problem/31408

#include <iostream>
#include <queue>
using namespace std;
const int MAX = 100000;
int troop[MAX + 1]; // 0으로 초기화
priority_queue<int> pq;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
int tmp;
cin >> N;
for(int i = 0; i < N; i++){
cin >> tmp;
troop[tmp]++;
}
for(int i = 1; i <= MAX; i++){
if(troop[i] != 0) pq.push(troop[i]);
}
if(pq.top() > (N+1) / 2) cout << "NO";
else cout << "YES";
return 0;
}

처음에는 입력을 받았을 때 문제의 입출력예시 설명처럼 위치를 바꾸는 식으로 해볼까 생각을 했었고, 그 다음에는 우선순위 큐를 이용해서 일정 조건을 만족하는지 여부를 큐가 empty할 때까지 반복하는 방법을 생각했었다. 그러다 보니 코드에 불필요하게 우선순위 큐가 사용되어있다. 그냥 반복문 돌리면서 max만 찾아도 상관없다.