알고리즘, 자료구조/Codility
[Javascript] Codility Lesson9 - MaxSliceSum
jaee
2022. 6. 22. 22:00
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/
문제 요약
- 정수로 구성된 배열 A가 주어졌을 때, 합산 결과가 가장 큰 연속 구간의 합을 구하여라.
풀이
function solution(A) {
let maximum = A[0];
// 누적값을 저장할 변수 accum
let accum = A[0];
for(let i = 1; i < A.length; i++) {
// 누적값과 A[i]의 합이 A[i]보다 작으면 accum을 A[i]로 변경한다
accum = accum + A[i] < A[i] ? A[i] : accum + A[i];
// accum이 maximumq보다 크면 maximum을 accum으로 변경한다
maximum = accum > maximum ? accum : maximum;
};
return maximum;
}
이렇게 연속된 구간의 합산 or 연속된 구간의 양 끝 값 계산과 같은 문제를 풀 때 아래 2개 컨셉을 기억해야겠다.
1) 메모이제이션을 사용하여 중첩 루프문을 피할 것
2) 루프는 끝까지 돌되, 문제가 요구하는 바에 따라 시작점은 변경될 수 있다는 것