1. 제출 코드 (40분 49초 / 큐)
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
ArrayDeque<Integer> q1 = new ArrayDeque<>();
ArrayDeque<Integer> q2 = new ArrayDeque<>();
long tq1 = 0;
long tq2 = 0;
boolean isValid = false;
for(int i = 0; i < queue1.length; i++) {
q1.add(queue1[i]);
q2.add(queue2[i]);
tq1 += queue1[i];
tq2 += queue2[i];
}
while(tq1 != tq2) {
if(answer == queue1.length * 3) {
answer = -1;
break;
}
if(tq1 > tq2) {
int t = q1.pop();
q2.add(t);
tq1 -= t;
tq2 += t;
} else if(tq1 < tq2) {
int t = q2.pop();
q1.add(t);
tq2 -= t;
tq1 += t;
}
answer++;
}
return answer;
}
}
2. 구현 로직
- 각 배열의 값을 큐에 넣어주고 큐의 합을 각각 저장한다.
- 각 큐의 합이 같아질 때까지 반복한다.
- tq1이 크다면 q1.pop()하고 해당 값만큼 tq1의 값을 빼준다. 그리고 tq2의 값을 해당 값만큼 더한다.
- tq2이 크다면 q2.pop()하고 해당 값만큼 tq2의 값을 빼준다. 그리고 tq1의 값을 해당 값만큼 더한다.
- 만약, answer가 queue1.lenght*3과 같다면 같은 값을 만들 수 없으므로 answer = -1
3. 유의할 점
- 큐의 원소 합을 같게 만들 수 없는 경우의 조건을 고려해야될 거 같다.