투포인터라는 존재를 모르던 몇달 전, 카카오 코테를 보면서 이 문제를 어떻게 풀어야할지 한참을 고민했다.
코테가 끝나고 사람들에게 물어봤는데 투포인터로 풀었다길래 감도안잡히고 나중에 프로그래머스 올라오면 풀어보자 해서 기다린 문제.
투포인터란 배열이 있고 시작과 끝점을 계속해서 움직이면서 원하는 값을 도출하는 알고리즘이다.
처음 while문 조건으로 start의 값이 totalArr의 길이까지 도달하면 끝내는 걸로 했는데 11번과 28번 테케에서 시간초과가 나서 count로 판별하는걸로 수정하였다.
function solution(queue1, queue2) {
let totalArr = [...queue1, ...queue2];
let maxCount = totalArr.length*2;
let start = 0;
let end = queue1.length;
const sum = (arr)=>arr.reduce((a,b)=>a+b);
let totalNum = sum(totalArr.slice(start, end));
let goalNum = sum(totalArr)/2;
let count = 0;
while(count <= MaxCount){
if(totalNum < goalNum){
totalNum += totalArr[end];
end++;
}else if(totalNum > goalNum){
totalNum -= totalArr[start];
start++;
}else if(totalNum === goalNum){
return count;
}
count++;
}
return -1;
}