Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발하지연

[백준 2212번] 센서 (python) 본문

알고리즘

[백준 2212번] 센서 (python)

JeongJiyeon 2021. 7. 19. 19:04

문제

한국도로공사는 고속도로의 유비쿼터스화를 위해 고속도로 위에 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)이 길이합의 최솟값이 된다.

 

Comments