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에 합해줍니다.
'알고리즘' 카테고리의 다른 글
[백준] 문자열 폭발 - java (0) | 2021.05.04 |
---|---|
[카카오 인턴] 키패드 누르기 - java (0) | 2021.04.30 |
[백준] 두용액 - java (0) | 2021.04.27 |
[SW Expert Academy] 등산로 조성 - java (0) | 2021.04.22 |
[SW Expert Academy] 수영장 - java (0) | 2021.04.22 |