#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
int ans = 0;
int popCnt1 = 0, popCnt2 = 0;
int n;
void doLogic(queue<long long>& q1, queue<long long>& q2, long long sum1, long long sum2, int cnt){
// 원래 자신으로 돌아온 경우
if(popCnt1==2*n || popCnt2==2*n){
ans=-1;
return;
}
// base case: 두 수 합이 같은 경우
if(sum1 == sum2) {
ans=cnt;
return;
}
else if(sum1 > sum2){
q2.push(q1.front());
sum1 -= q1.front();
sum2 += q1.front();
q1.pop();
popCnt1++;
}
else if(sum1 < sum2){
q1.push(q2.front());
sum2 -= q2.front();
sum1 += q2.front();
q2.pop();
popCnt2++;
}
doLogic(q1, q2, sum1, sum2, cnt+1);
}
int solution(vector<int> queue1, vector<int> queue2) {
queue<long long> q1, q2;
long long sum = 0, sum1 = 0, sum2 = 0;;
n = queue1.size()*2;
for(int i=0; i<queue1.size(); i++){
q1.push((long long)queue1[i]);
q2.push((long long)queue2[i]);
sum1 += (long long)queue1[i];
sum2 += (long long)queue2[i];
}
sum = sum1+sum2;
// 합이 홀수인 경우 두 큐의 원소를 같게 만들 수 없음
if(sum%2==1) return -1;
doLogic(q1, q2, sum1, sum2, 0);
return ans;
}
Leave a comment