[JAVA 문제 풀이] 355. 두 큐 합 같게 만들기

프로그래머스 (118667)
Stupefyee's avatar
Jul 02, 2025
[JAVA 문제 풀이] 355. 두 큐 합 같게 만들기
notion image
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2) { int answer = 0; Queue<Integer> q1 = new LinkedList<>(); Queue<Integer> q2 = new LinkedList<>(); long q1Sum = 0; long q2Sum = 0; // 각 큐에 배열 값과 합 저장 for (int i =0;i<queue1.length;i++) { q1.add(queue1[i]); q1Sum += queue1[i]; q2.add(queue2[i]); q2Sum += queue2[i]; } while(q1Sum != q2Sum) { // 각 큐의 합이 같아질때 까지 if (q1Sum > q2Sum) { // 큐1의 합이 클 때 int num = q1.poll(); q2.add(num); q2Sum += num; q1Sum -= num; } else { // 큐2의 합이 클 때 int num = q2.poll(); q1.add(num); q1Sum += num; q2Sum -= num; } answer++; // 옮긴 횟수 증가 // 값이 같아지지 않을 경우 if (answer > queue1.length * 3) { return -1; } } return answer; } }
 

다른 사람의 코드

class Solution { public int solution(int[] queue1, int[] queue2) { int[] totalQueue = new int[queue1.length + queue2.length]; // queue1 + queue2 long queue1Sum = 0; long queue2Sum = 0; // queue1 넣기 + queue1 합 for (int i = 0; i < queue1.length; i++) { int val = queue1[i]; totalQueue[i] = val; queue1Sum += val; } // queue1 값 뒤에 queue2 넣기 + queue2 합 for (int i = queue1.length; i < queue1.length + queue2.length; i++) { int val = queue2[i - queue1.length]; totalQueue[i] = val; queue2Sum += val; } // queue1 합 + queue2 합이 홀수 >> 같아질 수 없음 >> -1 if ((queue1Sum + queue2Sum) % 2 == 1) return -1; int count = 0; int left = 0; int right = queue1.length; long half = (queue1Sum + queue2Sum) / 2; // 두 큐의 값이 같아진 값 while (left < right && right < totalQueue.length) { // 범위를 벗어남 >> 두 큐의 합 같아지기 불가 if (queue1Sum == half) { return count; } else if (queue1Sum > half) { queue1Sum -= totalQueue[left++]; // queue1 값 만큼 빼기 } else { queue1Sum += totalQueue[right++]; // queue2 값 만큼 더하기 } count++; } return -1; } }
Share article

stupefyee