본문 바로가기

미역/자바

그룹 합의 차이가 최소인 두 그룹으로 나누기

문제

 

 정수 배열 하나가 있다. 이 배열을 두 그룹으로 나누는데 각 그룹의 원소들의 합을 서로 뺐을 때 가장 최솟값이 되도록 그룹을 나누어라. 그리고 그 최솟값을 반환하라. 

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