두 큐를 합치고, 포인터 두개를 사용하여, 목표의 합보다 작으면 q2를 +1, 목표의 합보다 크면 q1++을 해준다. 여기서 핵심은 q1의 합만 신경쓰는 것이다. q1의 합이 목표합이 된다면, 자동으로 q2의 합이 목표합이 되기때문이다
function solution(queue1, queue2) {
var answer = 0;
var q1Sum = queue1.reduce((prev,now)=>prev+=now);
var q2Sum = queue2.reduce((prev,now)=>prev+=now);
let goalSum = (q1Sum + q2Sum)/2;
let newQueue = queue1.concat(queue2);
let q1Idx = 0;
let q2Idx = queue1.length;
if((q1Sum + q2Sum) % 2 !== 0){
return answer = -1;
}
while(q1Sum !== goalSum){
if(q1Sum < goalSum){
q1Sum+=newQueue[q2Idx];
answer++;
q2Idx++;
}else if(q1Sum > goalSum){
q1Sum-=newQueue[q1Idx];
answer++;
q1Idx++;
}
if(q1Idx >= q2Idx || q2Idx >= newQueue.length){
return -1;
}
}
return answer
}
마지막 if문에서 q2Idx >= newQueue.length의 종료조건을 생각하기가 어려웠다. [102, 103] 과 [101,100]을 보면, 무한루프를 돌기때문에 q2Idx가 newQueue.length초과하면 종료하는 조건을 추가해주어야 한다.