본문 바로가기
알고리즘 문제/Java

[프로그래머스/Java] 두 큐 합 같게 만들기

by 현장 2026. 5. 12.

-Code

import java.util.*;

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        // 각 큐를 덱에 넣고 각 덱의 합 구하기
        long sum1 = 0, sum2 = 0;
        Deque<Integer> deq1 = new ArrayDeque<>();
        for (int el : queue1) {
            sum1 += el;
            deq1.addLast(el);
        }
        Deque<Integer> deq2 = new ArrayDeque<>();
        for (int el :  queue2) {
            sum2 += el;
            deq2.addLast(el);
        }
        // 계산
        int answer = 0;
        // 최대 반복 횟수 지정
        int loopCnt = (deq1.size() + deq2.size()) * 2;
        while (answer < loopCnt) {
            // 2개의 합이 같은 경우 반환
            if (sum1 == sum2) {
                return answer;
            }
            // 각 합의 크기에 따른 계산
            if (sum1 > sum2) {
                // 비어있으면 -1
                if (deq1.isEmpty()) return -1;
                // 1번 큐가 큰 경우 1번에서 pop
                int pop = deq1.pollFirst();
                sum1 -= pop;
                sum2 += pop;
                deq2.addLast(pop);
            } else {
                // 비어있으면 -1
                if (deq2.isEmpty()) return -1;
                // 2번 큐가 큰 경우 2번에서 pop
                int pop = deq2.pollFirst();
                sum1 += pop;
                sum2 -= pop;
                deq1.addLast(pop);
            }
            answer++;
        }
        return -1;
    }
}

큐 계산을 편하게 하기위해서 2개의 덱을 선언하고 각 큐의 합을 저장하여 관리해 해결했습니다.