shift()
는 연산 비용이 크기 때문에 push()
만 실행하고 큐 가장 앞의 위치를 인덱스에 저장function solution(queue1, queue2) {
let result = 0;
const maxResult = queue1.length * 3;
let [sum1, sum2] = [
queue1.reduce((a, c) => a + c, 0),
queue2.reduce((a, c) => a + c, 0),
];
let [i1, i2] = [0, 0];
while (sum1 !== sum2) {
if (result >= maxResult) return -1;
if (!queue1[i1] || !queue2[i2]) return -1;
if (sum1 < sum2) {
queue1.push(queue2[i2++]);
sum1 += queue1.at(-1);
sum2 -= queue1.at(-1);
} else {
queue2.push(queue1[i1++]);
sum1 -= queue2.at(-1);
sum2 += queue2.at(-1);
}
++result;
}
return result;
}
처음에 문제만 보고서 못 풀 것 같다는 생각이 들었는데 막상 시작하니까 금방 풀렸다.
shift()
때문에 시간 초과 나는 거랑, 최악의 경우를 두 큐 길이의 합으로 해서 1번 테스트 케이스가 통과 못하는 것 때문에 시간을 좀 썼다.
[1, 1, 1, 1, 1] [1, 1, 1, 9, 1] => 12
같이 두 큐의 합보다 결과가 커지는 경우가 있으므로, 최악의 경우를 큐 길이 * 3으로 넉넉히 잡아줬다.