https://www.acmicpc.net/problem/1417
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력 및 pq 삽입
int N = Integer.parseInt(br.readLine()) - 1;
int dasom = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < N; i++) {
pq.add(Integer.parseInt(br.readLine()));
}
int count = 0;
while (!pq.isEmpty() && pq.peek() >= dasom) {
++dasom;
pq.add(pq.poll() - 1);
++count;
}
System.out.println(count);
}
}
최소 표 수
를 구해야 한다.MaxHeap(PriorityQueue)
에 다솜이를 제외한 모든 후보들의 득표수를 넣는다.heap
에서 값을 꺼낸 후 다솜이의 득표 수와 비교한다. priorityQueue
에 넣는 발상까진 쉽게 이해할 수 있다.틀렸습니다.
가 나타난다.대략
( 후보 - dasom ) / 2
를 하거나 같은 경우엔 1을 빼는 식으로 계산 효율을 높이려 그랬는데, 맞지 않았다.
pq
를 사용하되, 후보자와 다솜이의 차이를 더하고 빼는 방식으로 구현하려 했다.