본문 바로가기
알고리즘

[백준] 센서 - java

by minkang 2021. 4. 28.

www.acmicpc.net/problem/2212

 

2212번: 센서

첫째 줄에 센서의 개수 N(1<=N<=10,000), 둘째 줄에 집중국의 개수 K(1<=K<=1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 이상 있으며

www.acmicpc.net

public class 센서 {
	static int N,K;
	static int arr[];
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		K = Integer.parseInt(br.readLine());
		arr = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(arr);
		int dif[] = new int[N-1];
		
		for(int i=0; i<N-1; i++) {
			dif[i] = arr[i+1] - arr[i];
		}
		Arrays.sort(dif);

		int sum =0;
		for(int i=(N-2)-(K-1);  i>=0; i--) {
			sum += dif[i];
		}
		System.out.println(sum);
	}
}

그리디 문제였습니다.

센서가 4개이고 기지국이 1개이면 기지국이 4개의 센서를 커버합니다. ( sum은 거리차이 4개의 합)

센서가 4개이고 기지국이 2개이면 기지국이 각각 2개 영역의 센서를 커버 가능합니다. (영역간 1개)

 -> 거리차이가 가장 긴 곳을 1번 건너뛸 수 있습니다.

센서가 4개이고 기지국이 3개이면 기지국이 3개 영역의 센서를 커버 가능합니다. ( 영역간 2개 )

 -> 거리차이가 긴 곳 부터 2번 건너뛸 수 있습니다. 

센서가 4개이고 기지국이 4개면 기지국이 4개의 영역으로 센서를 커버 가능합니다. ( 영역간 3개 )

 -> 거리차이가 긴 곳 부터 3번 건너뛸 수 있습니다. 여기서 dif[]의 크기는 3이므로 전부 건너뛰게 됩니다.

 

1. 센서끼리의 거리차이를 구합니다.

2. (기지국 수 - 1) 만큼 거리차이가 긴 센서들을 건너뛰고 sum에 합해줍니다.