※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1417번 문제인 국회의원 선거이다.
문제는 아래 링크를 확인하자.

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

 

1417번: 국회의원 선거

첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 50보다 작거나 같

www.acmicpc.net

다솜이를 제외한 다른 사람의 득표수의 최댓값이 다솜이의 투표수보다 작거나 같지 않게 될 때까지 가장 득표수가 많은 사람을 지지하는 사람을 매수하는 과정을 시뮬레이션해 문제를 해결하자.

 

여러 사람의 득표수의 최댓값을 항상 바로바로 접근하는 것은 우선순위 큐(priority queue) 자료구조를 이용하면 빠르고 간단하게 구현할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <queue>
using namespace std;

int N;
priority_queue<int> pq;
int dasom;
int ans;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> dasom;
	for (int i = 1; i < N; i++) {
		int x; cin >> x;
		pq.push(x);
	}

	pq.push(0);

	while (pq.top() >= dasom) {
		int x = pq.top(); pq.pop();
		pq.push(x - 1);
		dasom++, ans++;
	}

	cout << ans;
}
728x90

+ Recent posts