📖 오늘의 학습 키워드
정렬
[Append K Integers With Minimal Sum]
https://leetcode.com/problems/append-k-integers-with-minimal-sum/description/
class Solution {
public long minimalKSum(int[] nums, int k) {
long answer = 0;
int len = nums.length;
long pre = 0;
Arrays.sort(nums);
for(int i = 0; i < len; i++){
long diff = nums[i] - 1 - pre;
if(diff > 0) {
if(diff < k) {
answer += diff * 0.5 * (nums[i] + pre);
k -= diff;
}
else {
answer += k * 0.5 * (pre + k + pre + 1);
k = 0;
}
}
if(k == 0) {
break;
}
pre = nums[i];
}
if(k > 0) {
answer += k * 0.5 * (nums[len-1] + k + nums[len-1] + 1);
}
return answer;
}
}
nums
를 오름차순
으로 정렬한다.i
가 0
부터 len(nums의 길이)-1
까지 for 문을 돌며 새로 추가한 k
개의 정수들의 합의 최솟값을 구한다.nums[i]
와 pre
(직전 값) 사이의 정수의 개수를 구해 diff
에 저장한다.diff
값이 0
보다 클 경우, diff
가 k
보다 작으면 nums[i]
와 pre
사이의 모든 값의 합을 구해 answer에 더한다. 만약 k
보다 크거나 같다면 pre
와 pre+k
사이의 모든 값의 합을 구해 answer에 더한다.k
가 0
이 되면 for 문을 빠져나온다.pre
에 nums[i]
을 저장한다.k
가 0
보다 크다면 nums[len-1]
(배열의 마지막 값)와 nums[len-1]+k
사이의 모든 값의 합을 구해 answer에 더한다.answer
를 반환한다.