Array.sorts하면서 비교했다. Array.sorts를 하면 내림차순으로 되는 줄 알고.. 있었는데 출력해보니 오름차순으로 정렬된다는 점을 알았다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_1417_국회의원선거_S5 {
static int n, m;
static int result = 0;
static int dasom;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
dasom = Integer.parseInt(br.readLine());
if (n > 1) {
arr = new int[n - 1];
for (int i = 0; i < n - 1; i++)
arr[i] = Integer.parseInt(br.readLine());
while (true) {
if (dasom <= arr[n - 2]) {
arr[n - 2]--;
dasom++;
result++;
} else if (dasom > arr[n - 2])
break;
}
}
System.out.println(result);
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] input = new int[N];
for (int i = 0; i < N; i++) {
input[i] = Integer.parseInt(br.readLine());
}
int num = 0;
int vote = input[0];
int answer=0;
while(true){
for (int i = 0; i < N; i++) {
if(input[i] >= vote){
num = i;
vote = input[i];
}
}
if(num == 0) break;
input[0]++;
input[num]--;
answer++;
ㅐ
vote = -1;
}
System.out.println(answer);
}
}
for (int i = 0; i < N; i++) {
if(input[i] >= vote){
num = i;
vote = input[i];
}
}
전체 후보의 득표를 훑어서(0 ~ N-1)
vote보다 크거나 같으면, ㅐ
이 루프가 끝나면:
num → 가장 득표 높은 후보의 index
vote → 그 후보의 득표수
if(num == 0) break;
num == 0 이면 1등이 다솜이므로 더 이상 뺏을 필요 없음.input[0]++; // 다솜 표 +1
input[num]--; // 가장 강한 경쟁자 표 -1
answer++; // 매수 횟수 증가
즉, 가장 위험한 경쟁자에게서 표를 뺏어서 다솜에게 줌*
vote = -1;
vote = -1 로 초기화해서 다음 for문에서 정상적으로 갱신되도록 함
- 매 반복마다 “현재 최고 득표자”를 찾고
- 그 사람에게서 표를 1개 가져와서 다솜에게 줘서
- 다솜이 가장 높은 득표를 얻을 때까지 반복
즉, 다솜이 확실히 1등이 될 때까지 최소 횟수로 표를 훔치는 그리디 알고리즘.