문제


풀이
은찬
function solution(cookie) { const length = cookie.length; let answer = 0; for(let mid = 1; mid < length; mid++){ let leftStart = mid - 1; let rightStart = mid; let leftSum = cookie[leftStart--]; let rightSum = cookie[rightStart++]; let keep = true; if(leftSum === rightSum){ answer = Math.max(answer, rightSum); } while(keep){ if(leftStart >= 0 && leftSum <= rightSum){ leftSum += cookie[leftStart--]; } else if(rightStart < length && rightSum <= leftSum){ rightSum += cookie[rightStart++]; } else{ keep = false; } if(leftSum === rightSum){ answer = Math.max(answer, rightSum); } } } return answer; }
재영
// 구간합을 구하는 함수 생성 const getPrefixSum = (arr) => { const arrLength = arr.length; const arrPrefixSum = new Array(arrLength + 1).fill(0); for (let i = 0; i < arrLength; i += 1) { const now = arr[i]; arrPrefixSum[i + 1] = now + arrPrefixSum[i]; } return arrPrefixSum; }; const solution = (cookie) => { if (cookie.length === 1) return 0; let result = 0; const cookiePrefixSum = getPrefixSum(cookie); // 착각 - 구간합을 구해줘야 한다는 생각 const cookieLength = cookie.length; // 기준점 이동시키기 for (let m = 0; m < cookieLength - 1; m += 1) { const leftEnd = m; const rightStart = m + 1; let leftStart = leftEnd; let rightEnd = rightStart; while (leftStart >= 0 && rightEnd < cookieLength) { let nowLeftSum = cookiePrefixSum[m + 1] - cookiePrefixSum[leftStart]; let nowRightSum = cookiePrefixSum[rightEnd + 1] - cookiePrefixSum[m + 1]; if (nowLeftSum === nowRightSum) { result = Math.max(nowLeftSum, result); rightEnd += 1; leftStart -= 1; } else if (nowLeftSum < nowRightSum) { leftStart -= 1; } else { rightEnd += 1; } } } return result; };
효성
function solution(cookie) { if(cookie.length <= 1) { return 0; } const N = cookie.length; let maxCookie = 0; for(let m = 0; m < N - 1; m++) { let l = m, r = m + 1; let lSum = cookie[l], rSum = cookie[r]; while(l >= 0 && r < N) { if(lSum === rSum) { maxCookie = Math.max(maxCookie, lSum); r++; l--; rSum += cookie[r]; lSum += cookie[l]; } else if(lSum > rSum && r + 1 < N) { r++; rSum += cookie[r]; } else if(lSum < rSum && l - 1 >= 0) { l--; lSum += cookie[l]; } else { break; } } } return maxCookie; }