-
[백준] 2212번: 센서 (Python)Algorithm PS👩🏻💻/백준 2023. 5. 15. 16:37
문제 링크
https://www.acmicpc.net/problem/2212
2212번: 센서
첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있
www.acmicpc.net
풀이
알고리즘
[그리디]
- 여러 센서의 후보들을 묶는 것으로 생각하면 k개의 묶음을 만들면 된다.
- 센서를 오름차순하여 좌표 순으로 놓는다. ex. [1, 6, 9, 3, 6, 7] -> [1, 3, 6, 6, 7, 9]
- 원소간의 차를 표현한 리스트를 만든다. -> diff = [2, 3, 0, 1, 2]
- 2개의 묶음을 만들기 위해선 1개의 간격을 버리면 된다. -> 따라서 k개의 묶음을 만들기 위해선 간격의 값이 가장 큰 것부터 시작해서 k-1개 버린다.
- 가장 큰 간격을 버리면, 나머지 간격들의 합은 묶음 안에서의 간격들을 다 더한 값이 된다.
- 따라서 diff 정렬 = [0, 1, 2, 2, 3] 인 경우,
- K = 2 이면 k-1개의 간격을 빼므로 뒤에서부터 k-1개를 빼고 더하면 된다. ex. [0, 1, 2, 2, 3] 중에서 [0, 1, 2, 2] 만 더하기
풀이 코드
n = int(input()) k = int(input()) sensors = list(map(int, input().split())) sensors.sort() diff = [] for i in range(1, n): diff.append(sensors[i] - sensors[i-1]) diff.sort() print(sum(diff[:(n-1)-(k-1)]))
'Algorithm PS👩🏻💻 > 백준' 카테고리의 다른 글
[백준] 2470번: 두 용액(Python, Binary Search) (0) 2023.05.29 [백준] 2141번: 우체국(Python) (0) 2023.05.22 [백준] 21314번: 민겸 수(Python) (0) 2023.05.14 [백준] 2615번: 오목 (완전탐색, Python) (0) 2023.05.10 [백준] 2887번: 행성 터널(그래프, Python) (1) 2023.05.10