728x90
백준 2212번 문제풀이에 대해서 알아보겠다. 문제 해설은 다음 링크를 확인하면 된다. 문제 해설
2212번: 센서
첫째 줄에 센서의 개수 N(1<=N<=10,000), 둘째 줄에 집중국의 개수 K(1<=K<=1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 이상 있으며
www.acmicpc.net
2212번 센서는 그리드 유형의 문제이다. 문제를 해결하기 위한 최적의 해를 찾아야 한다. 센서 문제는 주어진 센서들 중에서 집중국을 선정하여 센서들 간의 거리가 가장 작게 만드는 것이다. 문제를 풀기 위해서는 다음의 과정을 거쳐야 한다.
- 센서 위치 정보를 내림차순 정렬한다.
- 각 센서들 사이의 거리를 계산하여 저장한다.
- 센서들 사이의 거리 정보를 오름차순 정렬한다.
- k-1번 가장 큰 거리 정보를 제거해준다.
- 남아있는 거리 정보를 모두 더해준다.
문제에서 제공하는 예제를 통해서 위의 과정을 알아보겠다. n = 6, k =2 센서 위치 정보는 data = [1, 6, 9, 3, 6 ,7], 각 센서들의 거리 정보는 minus=[]이라고 하겠다.
1번 과정의 결과 data = [1, 3, 6, 6, 7 ,9], 2번 과정의 결과 minus = [2, 3, 0, 1, 2], 3번 과정의 결과 minus = [3, 2, 2, 1, 0], 4번 과정의 결과 minus = [2, 2, 1, 0], 5번 과정의 결과 5
위의 과정을 코드로 작성하면 아래와 같다.
n = int(input())
k = int(input())
data = list(map(int, input().split()))
if k >= n:
print(0)
else:
data.sort()
minus = []
value = 0
for i in range(len(data)-1):
minus.append(data[i+1] - data[i])
minus.sort(reverse=True)
for i in range(k-1):
minus.pop(0)
print(sum(minus))
728x90
'취업을 준비하며 정리하는 컴퓨터 지식 > Problem Solving' 카테고리의 다른 글
[Problem Solving] SQL 문제 풀이 (1) (0) | 2021.02.25 |
---|---|
[Problem Solving] 백준 2225번 합분해 문제풀이 (0) | 2021.02.16 |
[ProblemSolving] 백준 1202 보석 도둑 문제풀이 (0) | 2021.02.09 |
[ProblemSolving] 백준 10026번 적록색약 문제풀이 (0) | 2021.02.08 |
[ProblemSolving] 백준 1744번 수 묶기 문제풀이 (0) | 2021.02.05 |