functiongetSum(q) {
return q.reduce((acc, curr) => acc + curr, 0);
}
functionsolution(q1, q2) {
let dest = parseInt((getSum(q1) + getSum(q2)) / 2);
let tried = 0;
while (true) {
let a = getSum(q1);
let b = getSum(q2);
if (a === dest) {
break;
} elseif (a < b) {
q1.push(q2.shift());
tried += 1;
} elseif (a > b) {
q2.push(q1.shift());
tried += 1;
}
if (tried === q1.length * 2) return -1;
}
return tried;
}
매번 각 큐의 합을 구하면서 더 적은 합을 가진 큐에 데이터를 넣어주는 방식으로 중간값을 찾아가는 방식입니다. 이 방식은 while문 안에서 getSum-O(n)과 shift-O(n)을 사용하기 때문에 n^2의 복잡도를 가집니다. 실패는 없지만 몇몇 케이스에서 타임오버가 발생합니다. 제한사항을 보면 최악의 경우 300000^2 수 만큼 데이터 연산이 발생하기 때문에 오버될 수 밖에 없었습니다.