CodeWars 일흔 세 번째 문제

Updated:

Maximum subarray sum

public static int sequence(int[] arr) {
		
    int max = 0;

    for(int i = 0; i < arr.length; i++) {

        for(int j = 0; j < arr.length-i; j++) {
            int sum = 0;

            for(int x = j; x < j+i+1; x++) {
                sum+=arr[x];
            }

            if(max < sum) {
                max = sum;
            }
        }
    }

    return max;
}
  • 전형적인 다이다믹 코딩 문제였다.
  • 나는 문제 그대로 배열 갯수를 1,2,3… 씩 돌아가면서 최대값을 찾아 출력하는 것이었다.
  • 그러나 Best 코드는 달랐다.
  • 처음부터 하나씩 더해 가면서 0보자 작으면 버리고 크면 cur 변수에 넣는다. 그리고 이전에 더한 값 들 중에 찾아 놓은 max 값과 비교하여 크면 max에 저장 해놓고 다음 숫자로 간다.
  • 코드는 이해가 가는데 왜 이게 되는지 정확히 이해가 안간다. 머리가 한계가 있나보다.
public static int sequence(int[] arr) {
    int cur = 0, max = 0;
    for (int i : arr) {
        cur = Math.max(0, cur + i);
        max = Math.max(max, cur);
    }
    return max;
}