개발하지연
[백준 2212번] 센서 (python) 본문
문제
한국도로공사는 고속도로의 유비쿼터스화를 위해 고속도로 위에 N개의 센서를 설치하였다. 문제는 이 센서들이 수집한 자료들을 모으고 분석할 몇 개의 집중국을 세우는 일인데, 예산상의 문제로, 고속도로 위에 최대 K개의 집중국을 세울 수 있다고 한다.
각 집중국은 센서의 수신 가능 영역을 조절할 수 있다. 집중국의 수신 가능 영역은 고속도로 상에서 연결된 구간으로 나타나게 된다. N개의 센서가 적어도 하나의 집중국과는 통신이 가능해야 하며, 집중국의 유지비 문제로 인해 각 집중국의 수신 가능 영역의 길이의 합을 최소화해야 한다.
편의를 위해 고속도로는 평면상의 직선이라고 가정하고, 센서들은 이 직선 위의 한 기점인 원점으로부터의 정수 거리의 위치에 놓여 있다고 하자. 따라서, 각 센서의 좌표는 정수 하나로 표현된다. 이 상황에서 각 집중국의 수신 가능영역의 거리의 합의 최솟값을 구하는 프로그램을 작성하시오. 단, 집중국의 수신 가능영역의 길이는 0 이상이며 모든 센서의 좌표가 다를 필요는 없다.
기록
(greedy 8일차) 거리의 합이 최소가 되도록 하려면, 일직선상의 센서들 중 거리 차이가 가장 큰 지점 사이를 끊어 수신 가능 영역을 분리해야한다. 비슷한 문제를 공부했어서 같은 방법으로 해결했다. (백준 13164번)
코드
N = int(input())
K = int(input())
sensors = list(map(int, input().split()))
sensors.sort()
sensors_diff = [sensors[i]-sensors[i-1] for i in range(1, N)]
sensors_diff.sort()
print(sum(sensors_diff[:N-K]))
센서를 위치 오름차순으로 정렬한 후, 각 센서끼리의 거리차이를 계산한 배열을 만들어 오름차순으로 정렬한다.
가장 거리 차이가 큰 K-1개 차잇값을 제외한 나머지를 모두 더한다.
EX)
만약 집중국을 최대 3개 세울 수 있고 센서가 1 1 2 4 6 9 10 15 16 이라고 하자.
이 때, 6->9, 10->15에서 차이가 가장 크기 때문에 1 1 2 4 6 / 9 10 / 15 16 로 수신 가능 영역을 분리한다.
각 영역의 길이는 각 센서의 거리차이의 합으로 계산할 수 있으며, 따라서 (0+1+2+2)+(1)+(1)이 길이합의 최솟값이 된다.
'알고리즘' 카테고리의 다른 글
[백준 13975번] 파일 합치기 3 (python) (0) | 2021.07.19 |
---|---|
[백준 1092번] 배 (python) (0) | 2021.07.19 |
[백준 11000번] 강의실 배정 (python) (0) | 2021.07.19 |
[백준 2812번] 큰 수 더하기 (python) (0) | 2021.07.19 |
[백준 2141번] 우체국 (python) (0) | 2021.07.19 |