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

Bong2·2024년 5월 7일
0

알고리즘

목록 보기
13/63

문제 - 두 큐 합같게 만들기

문제접근

  1. queue1, queue2의 합계를 각각 구한다음에 queue를 활용하여 pop, insert를 해준다.
  2. 둘의 합계를 비교해서 합계가 큰 쪽에서 pop을 진행하여 작은 쪽에게 insert를 해준다. 이러한 과정을 합계가 같을 때까지 반복해준다.
  3. 어떠한 방법으로든 합계가 같아지지 않는 경우는 queue1과 queue2의 모든 원소들을 모두 변경하고 다시 원래 상태의 원소들의 값을 가질때보다 더 커지는 경우
    즉 (queue1.size() + queue2.size()) * 2보다 결과값이 커지는 경우 -1일 해준다.
import java.util.*;
//queue1,queue2의 현재 합산을 계산하면서 평균 값보다 큰 경우 pop(), 나머지 insert()
//같게 만들 수 없는 경우 
class Solution {
    public int solution(int[] queue1, int[] queue2) {
        int answer = 0;
        
        long sum1 = 0, sum2 = 0;
        
        Queue <Integer> q1 = new LinkedList<>();
        Queue <Integer> q2 = new LinkedList<>();
        
        for(int i =0;i<queue1.length;i++)
        {
            sum1 += (long)queue1[i];
            sum2 += (long)queue2[i];
            q1.offer(queue1[i]);
            q2.offer(queue2[i]);
        }
        
        while(true)
        {
            if(sum1 == sum2) break;
            int temp = 0;
            
            if(sum1 > sum2)
            {
                temp = q1.poll();
                q2.offer(temp);
                sum1 -= (long)temp;
                sum2 += (long)temp;
                
            }else if(sum1 < sum2)
            {
                temp = q2.poll();
                q1.offer(temp);
                sum1 += (long)temp;
                sum2 -= (long)temp;
            }
            
            answer++;
            
            if(answer > (q1.size() + q2.size()) * 2) 
            {
                answer = -1;
                break;
            }
        }
        
        return answer;
    }
}
profile
자바 백엔드 개발자로 성장하자

0개의 댓글