[Codility][PrefixSums] 한정된 move에서 가장 큰 배열합 찾기
8029 단어 AlgorithmscodilityAlgorithms
문제
배열 A, 스타트포인트 s, 무브 m이 주어졌을 때 배열 A의 s부터 m만큼 움직여서 얻을 수 있는 가장 큰 배열합을 구하라.
예) A = [2, 3, 7, 5, 1, 3, 9], s=4, m=6
이 때 인덱스 이동은 4->3->2->3->4->5->6이고 값은 7+5+1+3+9 = 25이다.
분석
- prefix_sum : 0부터 i번째 원소까지의 합으로 구성된 배열
- count_total(pref, left_pos, right_pos) : left_pos부터 right_pos까지의 합
- 첫번째 for loop에서 시작점부터 왼쪽을 점차 늘려가는 방식으로 탐색
- 두번째 for loop에서 시작점부터 오른쪽을 점차 늘려가는 방식으로 탐색
- 두개의 for loop에서 나온 결과중 최대값을 return
코드
const solution = (A, k, m) => {
let result = Number.NEGATIVE_INFINITY;
let pref = prefixSum(A);
for(let i=0; i<= Math.min(m, k); i++){
let leftPos = k-i;
let rightPos = Math.min(A.length-1, k+m - 2*i);
//console.log(leftPos, rightPos);
let sum = leftPos > 0 ? pref[rightPos]-pref[leftPos-1] : pref[rightPos];
result = Math.max(result, sum);
}
for(let i=0; i<= Math.min(m, A.length- k-1); i++){
let leftPos = Math.max(0, k - m + 2 * i);
let rightPos = k+i;
let sum = leftPos > 0 ? pref[rightPos]-pref[leftPos-1] : pref[rightPos];
result = Math.max(result, sum);
}
return result;
}
const prefixSum = A => {
let sum = 0;
return A.map(val => {
sum += val;
return sum;
})
}
Author And Source
이 문제에 관하여([Codility][PrefixSums] 한정된 move에서 가장 큰 배열합 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@minnsane/CodilityPrefixSums-한정된-move에서-가장-큰-배열합-찾기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const solution = (A, k, m) => {
let result = Number.NEGATIVE_INFINITY;
let pref = prefixSum(A);
for(let i=0; i<= Math.min(m, k); i++){
let leftPos = k-i;
let rightPos = Math.min(A.length-1, k+m - 2*i);
//console.log(leftPos, rightPos);
let sum = leftPos > 0 ? pref[rightPos]-pref[leftPos-1] : pref[rightPos];
result = Math.max(result, sum);
}
for(let i=0; i<= Math.min(m, A.length- k-1); i++){
let leftPos = Math.max(0, k - m + 2 * i);
let rightPos = k+i;
let sum = leftPos > 0 ? pref[rightPos]-pref[leftPos-1] : pref[rightPos];
result = Math.max(result, sum);
}
return result;
}
const prefixSum = A => {
let sum = 0;
return A.map(val => {
sum += val;
return sum;
})
}
Author And Source
이 문제에 관하여([Codility][PrefixSums] 한정된 move에서 가장 큰 배열합 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minnsane/CodilityPrefixSums-한정된-move에서-가장-큰-배열합-찾기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)