✅ 문제
💡 문제 이해
최대 k개의 집중국의 수신 가능 영역 길이의 합의 최솟값을 구하는 문제
1. 센서를 묶어 k개의 집중국으로 나눔
2. 각 집중국 내의 센서 간 수신거리의 합이 최소가 되는 경우 = 집중국간 경계의 거리가 최대가 되는 경우
✅ 풀이
문제 자체를 이해하는데 한참 걸렸다.
그리디 알고리즘 방식으로 접근하면 된다고는 생각했지만 실제적으로 구현이 좀 어려웠음
💡 문제 풀이 Point
1. 집중국이 k개일 때 집중국 경계 영역은 k-1개
2. 원점으로부터 거리 -> 오름차순 정렬 후 인근 센서 사이 거리 구하기
3. 센서 간 거리를 배열에 담고 오름차순하여 가장 큰 수 k-1개를 제외한 나머지 합을 구하기
아래에 예제 입력 2가지 경우를 모두 그림으로 그려 보았다.
각 센서간 거리를 구한 다음 가장 큰 순서대로 k-1개만큼 경계 거리라고 생각하면 된다.
집중국 내 센서간 거리의 합이 최소가 되어야 하므로 경계로 정한 수만 빼고 다 더해주면 끝!
나의 코드
import sys
input = sys.stdin.readline
# 최대 k개의 집중국의 수신 가능 영역 길이의 합의 최솟값
# 센서를 묶어 k개의 집중국으로 나눔
# 각 집중국 내 센서 간 수신거리 합이 최솟값 = 집중국 경계의 거리가 최대가 되는 경우
# 집중국이 k개일 때 집중국 경계 영역은 k-1개
# 원점으로부터 거리 -> 오름차순 정렬 후 인근 센서 사이 거리 구하기
n = int(input()) # 센서 개수
k = int(input()) # 집중국 개수
sensors = list(map(int, input().split())) # 센서 좌표
sensors.sort() # 가까운 순으로 정렬
distance = []
for i in range(0, n-1):
distance.append(sensors[i+1] - sensors[i])
distance.sort()
print(sum(distance[:n-k])) # 경계지점 k-1개 제외한 나머지 거리 합
'++ > 자료구조&알고리즘' 카테고리의 다른 글
[baekjoon] 10026. 적록색약 (0) | 2024.01.16 |
---|---|
[baekjoon] 7562. 나이트의 이동 (0) | 2024.01.16 |
[leetcode] 543. Diameter of Binary Tree (0) | 2024.01.12 |
[baekjoon] 2493. 탑 (1) | 2024.01.09 |
[baekjoon] 4949. 균형잡힌 세상 (2) | 2024.01.09 |