Computer Engineering/알고리즘 테스트

백준[1417]- 국회의원 선거

말하는호구마 2021. 2. 5. 04:47

다솜이가 국회의원이 되면...큰일날 것 같은데...

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

 

정말 문제 그대로 풀면 된다.

1. 반복문을 돌며 다솜이를 포함해서 모든 사람들의 득표수를 살펴서 제일 득표수가 많은 사람을 찾는다

2.제일 득표수가 많은 사람이 다솜이(arr[0])이라면 반복문을 빠져나오고 return

3. 제일 득표수가 많은 사람이 다솜이가 아니라면 그사람의 득표수를 1개 빼오고 다솜이의 득표수를 하나 올린다

(매수하는 사람이 최소가 되게 하기 위해 1씩 이동)

     (ex. arr[max]--   arr[0]++)

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] arr = new int[num];
        int result=0;

        for(int i=0;i<num;i++){
            arr[i] = sc.nextInt();

        }
        while(true){
            //돌 때 마다 득표수 많은 사람 찾아야함
            int maxPerson =0;
            for(int i=0;i<num;i++){
                if(arr[i]>=arr[maxPerson])
                    maxPerson = i;
            }
            if(maxPerson ==0){
                break;
            }

            arr[0]++;
            arr[maxPerson]--;
            result++;
        }
        System.out.println(result);
    }
}

 

여기서의 포인트는 변수 값과 그 범위의 설정이다.

다솜이를 포함해서 득표수가 가장 많은 사람을 뽑아야 하기 떄문에 maxPerson을 0부터 시작한다.

만약 득표수가 같다면(ex)다솜:5 다른 사람:5)

어처피 이 경우에도 표를 뺏어와야 다솜이가 이기기 때문에 arr[i]>=arr[maxPerson] 해줘야한다.  (=을 꼭 해줘야 한다)

졸려서 내가 무슨 글을 쓰고 있는지도 모르겠다....ㅎ