https://school.programmers.co.kr/learn/courses/30/lessons/118667
const sumFunc = (arr) => arr.reduce((acc, cur) => acc + cur, 0);
function solution(queue1, queue2) {
let [answer, sum1, sum2, idx1, idx2] = [0, sumFunc(queue1), sumFunc(queue2), 0, 0];
const [half, limit] = [(sum1 + sum2) / 2, queue1.length * 3];
// shift 없이 idx를 사용하는 이유는 js는 queue를 지원하지 않기 때문에
// shift를 사용하면 시간복잡도(n)이 걸려서 시간초과가 날 수 있다.
// limit는 최악의 케이스를 대비한 수.
// 최악의 케이스는 한 큐에서 하나를 제외하고, 다른 큐로 모두 보내는 경우이기 때문에
// 원래 길이 * 3을 넘어서 순회할 경우 return해서 탈출하도록 설정.
while (answer < limit) {
if (sum1 === sum2)
break;
if (sum1 > half) {
const data = queue1[idx1++];
sum1 -= data, sum2 += data, queue2.push(data);
} else {
const data = queue2[idx2++];
sum1 += data, sum2 -= data, queue1.push(data);
}
++answer;
}
return (answer < limit) ? answer : -1;
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] Lv 2. 줄 서는 방법 (0) | 2023.03.12 |
---|---|
[Programmers] (2018 KAKAO BLIND RECRUITMENT) Lv 2. [3차] 방금그곡 (0) | 2023.03.09 |
[Programmers] Lv 2. 숫자 변환하기 (0) | 2023.03.09 |
[Programmers] (월간 코드 챌린지 시즌1) Lv 2. 삼각 달팽이 (0) | 2023.03.08 |
[Programmers] (월간 코드 챌린지 시즌1) Lv 2. 쿼드압축 후 개수 세기 (0) | 2023.03.08 |
댓글