[백준/BOJ]1417. 국회의원 선거 [Silver 5]

  1. 국회의원 선거

문제출처 : 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해주고, 이때까지 카운트한 카운트를 출력해주면 된다.

좋은 웹페이지 즐겨찾기