주어진 두 큐의 각각 총합을 반복문으로 비교해서 목표로 하는 값(두 큐의 총합/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 만큼만 반복해준다!