function solution(queue1, queue2) {
var answer = 0;
let sum = 0;
let count1 = 0;
let count2 = 0;
for (let i = 0; i < queue1.length; i ++) {
sum += queue1[i]+ queue2[i];
count1 += queue1[i];
count2 += queue2[i];
};
if (sum % 2 !== 0) {
return -1;
};
while (true) {
if (count1 === sum / 2) return answer;
if (count1 > count2) {
const first = queue1.shift();
if (first > sum / 2) return -1;
queue2.push(first);
count2 += first;
count1 -= first;
} else {
const first = queue2.shift();
if (first > sum / 2) return -1;
queue1.push(first);
count1 += first;
count2 -= first;
}
answer += 1;
}
return answer;
}
문제에 충실히 구현했습니다. 다만 JS에서 큐를 구현하기 위한 shift()는 상당히 성능이 느리기 때문에 풀면서 시간 초과가 예상되었고 몇개의 테스트 케이스에서 시간 초과가 발생하였습니다.
function solution(queue1, queue2) {
let answer = 0;
let count1 = 0;
let count2 = 0;
let location1 = 0;
let location2 = 0;
const len = queue1.length;
for (let i = 0; i < queue1.length; i ++) {
count1 += queue1[i];
count2 += queue2[i];
};
const sum = count1 + count2;
while (answer < len * 3) {
if (count1 === sum / 2) return answer;
if (queue1[location1] > sum / 2 || queue2[location2] > sum / 2) return -1;
if (count1 > count2) {
count1 -= queue1[location1];
count2 += queue1[location1];
queue2.push(queue1[location1]);
location1 += 1;
} else {
count2 -= queue2[location2];
count1 += queue2[location2];
queue1.push(queue2[location2]);
location2 += 1;
}
answer += 1;
}
return answer === len * 3 ? -1 : answer;
}
이후에 포인터(location)를 통해 계속 배열에 추가하는걸로 해결했습니다. while문 횟수를 적용하지 않으면 무한 루프가 도는 경우가 있기 때문에 횟수를 배열 길이의 3배까지 설정했습니다.
참고 테스트케이스
[101, 100], [102, 103], -1