n개의 수가 주어졌을 때, 각각의 수에 변화를 적절하게 주어, 최종적으로 나오는 수들 중 최대 최소간의 차가 k 이하가 되게끔 만들려고 합니다. 수 a가 수 b로 바뀌는데 드는 비용이 |a - b|라 했을 때, 필요한 최소 비용 구하기
ex
6, 3, 7, 3, 5 -> 6, 4, 6, 4, 5
최대 최소간의 차:2(k)
비용: 0 + 1 + 1 + 1 + 0 = 3 발생, 출력: 3
solution
최솟값 <= x <=최솟값+최대 변화값
안에 들면 조건을 충족하므로, 최솟값을 설정하여 그에 맞는 비용을 탐색한다.
최솟값의 범위는 배열의 최솟값~최댓값으로 설정한다.
n,k = map(int,input().split())
arr=list(map(int,input().split()))
ans=1e9
for i in range(min(arr),max(arr)):
#최솟값 설정하여 탐색
cost=0
for x in arr:
if x<i:
cost+=i-x #최솟값으로 값 맞추기
elif i<=x<=i+k:
continue
elif x > i+k : #최댓값으로 값 맞추기
cost+=x-(i+k)
ans=min(cost,ans)
print(ans)'[Algorithm]' 카테고리의 다른 글
| 시뮬레이션 - 1차원 폭발 게임 (0) | 2023.05.14 |
|---|---|
| [탐색] 전략 추려내기 - ABC 줄세우기 (0) | 2023.05.10 |
| 완전탐색 - 여러 구간, 구간 합의 최댓값이 최소가 되도록 (0) | 2023.05.08 |
| [이코테] 다익스트라 알고리즘 (0) | 2022.06.02 |
| [백준] - 2839 설탕배달 (0) | 2022.05.27 |