

내가 작성한 코드
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