BOJ 31408 - 당직 근무표(C++) / Team Fortune Drill Week2

G1FTED_13·2025년 4월 16일

BOJ

목록 보기
11/20

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

문제를 푼 날짜: 2025. 04. 16

#implementation #math

내 풀이

#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만 찾아도 상관없다.

profile
어제보다, 더

0개의 댓글