문제
정수 배열 하나가 있다. 이 배열을 두 그룹으로 나누는데 각 그룹의 원소들의 합을 서로 뺐을 때 가장 최솟값이 되도록 그룹을 나누어라. 그리고 그 최솟값을 반환하라.
EX) [-1,6,9] -> [-1,9] , [6] -> 최솟값: 2
int[] numbers = {.....};
Arrays.sort(numbers);
int curGap = 0;
for(int i=0; i<numbers.length; i++){
curGap += numbers[i];
}
if(numbers[0] < 0){
int n = numbers[0];
for(int i=0; i<numbers.length; i++){
numbers[i] -= n;
}
curGap -= numbers.length*n;
}
for(int i=numbers.length-1; i>=0; i--){
int perhapsGap = curGap - numbers[i]*2;
if(perhapsGap >= 0 && curGap > perhapsGap){
curGap -= numbers[i]*2;
}
}
return Math.abs(curGap)
'미역 > 자바' 카테고리의 다른 글
Optional에 대하여 (0) | 2021.12.16 |
---|---|
StringBuilder (0) | 2021.12.01 |
소수 구하기 (0) | 2021.11.05 |
Comparable 과 Comparator (0) | 2021.11.02 |
그래프에서 DFS로 사이클 찾기 (0) | 2021.10.28 |