문제출처 : https://www.acmicpc.net/problem/1417
code
#include <stdio.h> int main() { int N, i, j, candidate[1000] = { NULL }; int cnt = 0, max = 0, max_index = 0; scanf("%d", &N); for (i = 0; i < N; i++) scanf("%d", &candidate[i]); if (N == 1) printf("0"); else { while (1) { max = 0; for (i = 1; i < N; i++) if (max < candidate[i]) { max = candidate[i]; max_index = i; } if (candidate[0]>candidate[max_index]) break; else { candidate[max_index]--, candidate[0]++, cnt++; } } printf("%d", cnt); } return 0; }
입력에서 N은 평범하게 받고 후보들은 반복문을 돌며 받는다.
그리고 N이 1이면 자동으로 다솜이가 당선되므로,N이 1일경우와 아닌경우로 나누어준다.
N이 1이 아니면 무한반복문을 돌아주는데, 기호 2번부터(기호1번은 다솜이기때문) 마지막까지 돌면서 최댓값과 그 인덱스를 기억해준다.
기억한 최댓값과 인덱스를 기반으로 표를 가장 많이 받은 후보의 표를-1, 다솜이 표를 +1, 카운트를 +1해준다. 이것을 반복하다 보면 표를 가장많이 받은 후보의 표보다 다솜이의 표(기호1번)가 더 많아지는 시기가 있는데, 이때 무한반복문을 break해주고, 이때까지 카운트한 카운트를 출력해주면 된다.