[프로그래머스] Lv2. 두 큐 합 같게 만들기 - JavaScript

이상돈·2023년 4월 3일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 택배상자

문제

제한사항

📌 내가 생각한 풀이

두 큐를 합치고, 포인터 두개를 사용하여, 목표의 합보다 작으면 q2를 +1, 목표의 합보다 크면 q1++을 해준다. 여기서 핵심은 q1의 합만 신경쓰는 것이다. q1의 합이 목표합이 된다면, 자동으로 q2의 합이 목표합이 되기때문이다
function solution(queue1, queue2) {
    var answer = 0;
    var q1Sum = queue1.reduce((prev,now)=>prev+=now);
    var q2Sum = queue2.reduce((prev,now)=>prev+=now);
    let goalSum = (q1Sum + q2Sum)/2;
    let newQueue = queue1.concat(queue2);
    let q1Idx = 0;
    let q2Idx = queue1.length;
    if((q1Sum + q2Sum) % 2 !== 0){
        return answer = -1;
    }
    while(q1Sum !== goalSum){
        if(q1Sum < goalSum){
            q1Sum+=newQueue[q2Idx];
            answer++;
            q2Idx++;
        }else if(q1Sum > goalSum){
            q1Sum-=newQueue[q1Idx];
            answer++;
            q1Idx++;
        }
        
        if(q1Idx >= q2Idx || q2Idx >= newQueue.length){
            return -1;
        }
    }
    
    return answer
}

📌 느낀점

마지막 if문에서 q2Idx >= newQueue.length의 종료조건을 생각하기가 어려웠다. [102, 103] 과 [101,100]을 보면, 무한루프를 돌기때문에 q2Idx가 newQueue.length초과하면 종료하는 조건을 추가해주어야 한다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글