- 문제
- 정수를 요소로 갖는 배열의 연속된 부분 배열의 집합 중 요소들의 합이 가장 큰 값을 내는 경우(LSCS)의 합을 리턴
- 시도
- 처음에 연속된 값으로 이루어진 배열을 멱집합으로 착각하여 문제를 풀었음
- 멱집합 중 가장 큰 수를 이루는 값의 합을 리턴시켜야 함
- 멱집합을 구할 때, 요소를 푸쉬하는게 아니라 +시켜주면 어떨까
- 아니면, 멱집합을 구하고 모든 요소를 다 더해서 새로운 배열로 만들어야겠다
- 그 배열의 Math.max 리턴
- 연속 배열의 합 중 가장 큰 합은 반복문을 통하여 다 구해보면 된다
- 0부터 끝까지 다 더해보고, 그 중 큰 값이면 갱신시키는 방식으로
- Number.MIN_SAFE_INTEGER(JS에서 안전하게 사용 가능 한 제일 작은 음수)
- 수도코드
const LSCS = function (arr) {
let max = arr[0];
for (let i = 0; i < arr.length; i++) {
let sumArr = arr[i];
if (max < sumArr) {max = sumArr;}
for (let j = i + 1; j < arr.length; j++) {
sumArr = sumArr + arr[j];
if (max < sumArr) {max = sumArr;}
}
}
return max;
}
- 레퍼런스
const LSCS = function (arr) {
let subArrSum = 0;
let max = Number.MIN_SAFE_INTEGER;
for (let i = 0; i < arr.length; i++) {
subArrSum = subArrSum + arr[i];
if (subArrSum > max) max = subArrSum;
if (subArrSum < 0) {
subArrSum = 0;
}
}
return max;
};