l~m은 첫째, m+1~r은 둘째이다. 여기서 공통된 부분 m을 움직이면서 값을 확인하자. 값이 같다면 더 큰 값이 존재할 수 있으므로, 멈추지 말아야하는 것이 핵심이다.
function solution(cookie) {
var answer = 0;
let len = cookie.length
let sum = cookie.reduce((prev,now)=>prev+=now);
let half = Math.floor(sum/2);
for(var i =1; i<=len-1; i++){
let lStandard = i-1;
let rStandard = i;
let sum1 = cookie[lStandard];
let sum2 = cookie[rStandard];
while(1){
if((sum1 === sum2) && (answer < sum1)){
answer = sum1
}else if(sum1 <= sum2 && lStandard !== 0){
lStandard--;
sum1 += cookie[lStandard];
}else if(sum1 >= sum2 && rStandard !== len-1){
rStandard++;
sum2 += cookie[rStandard];
}else{
break;
}
}
}
return answer;
}
투 포인터 문제였다. 여기서 핵심은 O(n^3)을 어떻게 O(n^2)으로 줄일 수 있냐의 문제였는데, 기준값을 움직이며 확인하면 됐었다.