문제

접근법
키 순으로 원생들이 주어지며 인접한 원생들의 키 차이를 구한다.
이때 조에 누가 들어있는지는 중요하지 않음.
예제는 다음과 같다.
5 3 1 3 5 6 10
3개의 그룹을 만들기 위해서는 가장 작은 차이를 가진 그룹을
2번
만 합치면 3개의 그룹이 된다.M-1 번 만큼 조를 만듬
인접한 원생의 키 차이는 다음과 같다.
1, 3 -> 2 3, 5 -> 2 5, 6 -> 1 6, 10 -> 4
정렬하면 1, 2, 2, 4 가 된다.(코드상에선 역정렬 하였다.)
정리
cost
에list[k+1]-list[k]
를 저장한다. (원생의 키 차이)
- 저장된 cost 를 역정렬 한다.
M-1
만큼 조를 만들기 때문에cost
를 계산하는 for 문은M-1
번 부터 시작한다.
코드
public class Main_13164 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String[] input = br.readLine().split(" "); int N = Integer.parseInt(input[0]); int M = Integer.parseInt(input[1]); int[] list = new int[N]; String[] inputList = br.readLine().split(" "); for(int i=0 ; i<N; i++) { list[i] = Integer.parseInt(inputList[i]); } List<Integer> cost = new ArrayList<>(); for(int k=0; k<N-1; k++) { cost.add(list[k+1]-list[k]); } Collections.sort(cost, Collections.reverseOrder()); int sum =0; for(int i = M-1; i<cost.size(); i++) { sum += cost.get(i); } bw.write(String.valueOf(sum)); bw.flush(); bw.close(); br.close(); } }
Share article