본문 바로가기
알고리즘/그리디 알고리즘

백준 2212번 : 센서 java

by LDY3838 2022. 8. 9.
반응형

이 문제는 문제를 이해하는 것이 어려운 문제였습니다.

이 문제는 N개의 센서가 있고 K개의 집중국이 있는데 K개의 집중국을 이용하여 수신 가능 영역의 길이의 합을 구하는 문제입니다.

이 문제에서 수신 가능 영역이 무엇인지를 설명드리겠습니다.

우선 위 문제의 예제 1번은 다음과 같습니다.

이제 이 센서들을 정렬해보겠습니다.

위의 그림과 같이 나옵니다.

이때 수신 가능 영역이란 아래의 그림과 같이 집중국을 세웠을 때 집중국들에 연결된 구역을 의미합니다.

위의 그림으로 예시를 들면 1 ~ 6까지 5에 7 ~ 9까지 2의 수신 가능 영역을 가져 총 7의 거리입니다.

이때 이 수신 가능 영역을 최소로 만들기 위해서는 두 점 사이의 거리가 가장 먼 곳을 제외하면 됩니다.

위의 그림에서는 3과 6의 거리의 차이가 6으로 가장 멉니다.

따라서 위의 그림과 같이 집중국을 설치하면 5의 수신 가능 영역을 가져 최소의 수신 가능 영역을 설정할 수 있습니다.

이와 같이 N개의 센서와 K개의 집중국이 있으면 N-K개만큼의 간격을 포함해야 합니다.

위의 그림에서는 6개의 센서에 2개의 집중국이 있기 때문에 4개의 간격을 포함하였고, 총 5개의 간격 중 가장 간격이 큰 1개를 제외할 수 있었습니다.


import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int K = Integer.parseInt(br.readLine());

        int[] intArr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0; i<N; i++)
            intArr[i] = Integer.parseInt(st.nextToken());

        Arrays.sort(intArr);

        Queue<Integer> q = new PriorityQueue<>();
        for(int i = 0; i<N-1; i++)
            q.offer(intArr[i+1] - intArr[i]);

        int ans = 0;
        for(int i = 0; i<N-K; i++)
            ans += q.poll();

        System.out.println(ans);
    }
}

문제를 이해한다면 쉽게 해결할 수 있는 문제였습니다.

반응형

'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글

백준 12904번 : A와 B java  (0) 2022.08.11
백준 1092번 : 배 java  (0) 2022.08.10
백준 2437번 : 저울 java  (0) 2022.08.08
백준 1744번 : 수 묶기 java  (0) 2022.08.05
백준 11000번 : 강의실 배정 java  (0) 2022.08.03

댓글