두 큐 합 같게 만들기

Lv. 2

Solution

export function makeEqualSum(queue1: number[], queue2: number[]) {
  const n = queue1.length;
 
  let sum1 = queue1.reduce((acc, curr) => acc + curr, 0);
  let sum2 = queue2.reduce((acc, curr) => acc + curr, 0);
  if ((sum1 + sum2) % 2 === 1) {
    return -1;
  }
 
  let answer = 0;
  let [startIndex, endIndex] = [0, n];
  while (sum1 !== sum2 && answer <= 3 * n) {
    if (sum1 < sum2) {
      const num = endIndex < n ? queue1[endIndex] : queue2[endIndex % n];
      sum1 += num;
      sum2 -= num;
      endIndex = (endIndex + 1) % (2 * n);
    } else {
      const num = startIndex < n ? queue1[startIndex] : queue2[startIndex % n];
      sum1 -= num;
      sum2 += num;
      startIndex = (startIndex + 1) % (2 * n);
    }
    answer += 1;
  }
 
  return sum1 === sum2 ? answer : -1;
}