행복 유치원 - 15164

Seongjin Jo·2023년 6월 1일
0

Baekjoon

목록 보기
33/51
post-thumbnail

문제

풀이

import java.util.*;

// 행복 유치원 - G5 - 정렬
public class ex13164 {

    static int n,k;
    static int[] student;
    static int answer=0;
    static ArrayList<Integer> list = new ArrayList<>();

    public static void solution(){
        Arrays.sort(student);

        // 1 3 5 6 10
        // 차이 : 2 2 1 4 -> 1 2 2 4

        for(int i=1; i<n; i++){
            list.add(student[i]-student[i-1]);
        }

        Collections.sort(list);

        for(int i=0; i<n-k; i++){
            answer+=list.get(i);
        }

    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        n = sc.nextInt();
        k = sc.nextInt();

        student = new int[n];
        for(int i=0; i<n; i++){
            student[i] = sc.nextInt();
        }

        solution();
        System.out.println(answer);
    }
}

정렬 , 그리디 문제다. 원생들을 k 만큼의 그룹으로 나누고 거기에서 원생들의 최소 키차이을 다 더해서 구해주면된다.

  1. 우선 원생들을 키순으로 오름차순 정렬시킨다. 그리고 각 원생들의 키차이를 각각 arrayList를 만들어서 담아준다.
  2. 그리고 최소한의 키차이를 구해야하기때문에 arrayList를 오름차순 정렬을 해준다.
  3. 이제 이 문제의 핵심인 그룹화를 시켜야한다. 현재 입력 예제는 5명의 원생과 3개의 그룹이 존재한다. 3개 그룹으로 나누면 2,2,1 이렇게 그룹이된다. 그러면 여기서 키차이는 2,2 인 그룹만 발생한다. 1은 혼자기 때문에 키차이가 없다.
  4. n-k 번 까지만 arrayList에서 각 그룹의 키차이를 최소순으로 구해주면 된다.
    ( 5-3을 해주면 그룹이 2개나오는데, 한그룹은 혼자기 때문에 n-k이 성립된다!! )

0개의 댓글