풀이
- 배열 하나를 두 그룹으로 나눠서, 두 그룹간의 합의차이가 최소가 되는 지점을 구합니다.
- 시각화하면 아래와 같습니다.
배열 a
a[1] a[2] a[3] a[4] a[5] >> 를 두 그룹으로 나눕니다
a[1] vs a[2] a[3] a[4] a[5]
a[1] a[2] vs a[3] a[4] a[5]
a[1] a[2] a[3] vs a[4] a[5]
a[1] a[2] a[3] a[4] vs a[5]
class Solution {
public int solution(int[] A) {
int[] dp = new int[A.length+3];
final int len = A.length;
dp[0] = A[0];
for(int i=1 ; i<len ; i++) {
dp[i] = dp[i-1] + A[i];
}
int mini = Integer.MAX_VALUE;
for(int i=1; i<len ; i++) {
int left = dp[i-1];
int right = dp[len-1]-dp[i-1];
int temp = Math.abs(left - right);
mini = Math.min(temp,mini);
}
return mini;
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.solution(new int[] {3,1,2,4,3}));
}
}
- 참고 : 효율성 통과 못하는 brute-force 버전의 코드
사라져따.. 나중에 찾아서 업로드 하겠습니다..
처음에 저도 '이미 구현해놓은 값을 이용해서 다음 값을 구한다'라는 컨셉에서 DP를 생각은 했는데! 생각만 했습니다.. 다음에 이 코드 설명 부탁 드릴게요!