문제
https://www.acmicpc.net/problem/2212
2212번: 센서
첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있
www.acmicpc.net
고속도로에 N개의 센서가 있고, 최대 K개의 집중국을 설치할 수 있는데, 각 집중국은 수신 가능한 영역을 조절할 수 있다. 센서와 적어도 한 집중국은 통신 가능해야 하며, 집중국의 유지비로 인해 각 집중국의 수신 가능 영역의 길이 합을 최소화해야 한다. K개의 집중국의 수신 가능 영역의 길이 합의 최솟값을 구하는 문제다.
예시
Example 1:
Input: 6
2
1 6 9 3 6 7
Output: 5
Example 2:
Input: 10
5
20 3 14 6 7 8 18 10 12 15
Output: 7
풀이
import sys
input = sys.stdin.readline
n = int(input())
k = int(input())
sensor = list(map(int, input().split()))
sensor.sort()
# 센서 간 거리 추가 및 내림차순으로 정렬
distance = []
for i in range(n - 1):
distance.append(sensor[i + 1] - sensor[i])
distance.sort(reverse=True)
# 센서 거리 상위 K - 1개를 제외한 거리 합
print(sum(distance[k - 1:]))
- 문제에 대한 이해를 하는 데 오래 걸렸는데 그림을 그려보면 좀 더 이해하기 쉬워진다.
- n개의 센서를 k개로 나눠야 하기 때문에 k-1 개의 구분선이 필요하다.
- 각 센서의 좌표를 오름차순으로 정렬하고, 센서 간 거리를 계산하여 내림차순으로 정렬한다.
- 센서 간 거리의 상위 k-1개를 제외한 나머지 거리의 합을 계산하여 출력한다.
'알고리즘' 카테고리의 다른 글
[리트코드(LeetCode)] 167번 Two Sum 2 - 파이썬/python (0) | 2024.01.19 |
---|---|
[백준(BOJ)] 2805번 나무 자르기 - 파이썬/python (0) | 2024.01.19 |
[백준(BOJ)] 11000번 강의실 배정 - 파이썬/python (0) | 2024.01.19 |
[백준(BOJ)] 1946번 신입 사원 - 파이썬/python (0) | 2024.01.18 |
[백준(BOJ)] 13305번 주유소 - 파이썬/python (0) | 2024.01.18 |