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

MINSANG YU·2022년 8월 31일
0

프로그래머스

목록 보기
2/15
post-thumbnail

문제 링크

핵심

주어진 두 큐의 각각 총합을 반복문으로 비교해서 목표로 하는 값(두 큐의 총합/2)보다 큰 큐에서 숫자를 뽑아 작은 큐로 옮기는 과정을 반복하면 최소 횟수를 구할 수 있다.

코드

import java.util.*;

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        int answer = 0;
        long q1sum = 0, q2sum = 0;
        Queue<Integer> q1 = new ArrayDeque<>();
        Queue<Integer> q2 = new ArrayDeque<>();
        for(int i=0; i<queue1.length; i++) {
            q1.offer(queue1[i]);
            q1sum += queue1[i];
        }
        for(int i=0; i<queue2.length; i++) {
            q2.offer(queue2[i]);
            q2sum += queue2[i];
        }
        
        while(true) {
            if(q1sum==q2sum) break;
            if(answer>(q1.size()+q2.size())*2) {
                answer = -1;
                break;
            }
            if(q1sum>q2sum) {
                int cur = q1.poll();
                if(cur>(q1sum+q2sum)/2) {
                    answer = -1;
                    break;
                }
                q1sum -= cur;
                q2sum += cur;
                q2.offer(cur);
            }
            else {
                int cur = q2.poll();
                if(cur>(q1sum+q2sum)/2) {
                    answer = -1;
                    break;
                }
                q2sum -= cur;
                q1sum += cur;
                q1.offer(cur);
            }
            answer++;
        }
        
        return answer;
    }
}

추가적으로 두 큐의 값이 어떤 방법을 통해서도 같아질 수 없는 경우 -1을 출력하기 위해 최대 두 큐의 크기 합*2 만큼만 반복해준다!

profile
쉿! 공부중

0개의 댓글