풀이법
1번
queue<int>q1;
queue<int>q2;
long long sum1=0;
long long sum2=0;
for(int i=0;i<queue1.size();i++){
q1.push(queue1[i]);
sum1+=queue1[i];
q2.push(queue2[i]);
sum2+=queue2[i];
}
2번
long answer = 0;
int flag = 0;
long tmp = queue1.size() * 3;
while(answer<=tmp){
if(sum2>sum1){
q1.push(q2.front());
sum1+=q2.front();
sum2-=q2.front();
q2.pop();
}else if(sum1>sum2){
q2.push(q1.front());
sum2+=q1.front();
sum1-=q1.front();
q1.pop();
}else{
flag=1;
break;
}
answer++;
}
sum1과 sum2를 비교해서 크면, pop하고 그 숫자를 다른 sum에다가 더해준다.
3번
위의 code에서 while문 조건에 해당하는 tmp가 queue.size의 3배이다.
3배 이내에 해결이 안되면 나가고,
만약 그전에 동일한 숫자가 있다면 else문을통해서 flag를 1로 세우고 나간다.
if(flag==1){
return answer;
}else{
return -1;
}
전체 코드
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int solution(vector<int> queue1, vector<int> queue2) {
queue<int>q1;
queue<int>q2;
long long sum1=0;
long long sum2=0;
for(int i=0;i<queue1.size();i++){
q1.push(queue1[i]);
sum1+=queue1[i];
q2.push(queue2[i]);
sum2+=queue2[i];
}
long answer = 0;
int flag = 0;
long tmp = queue1.size() * 3;
while(answer<=tmp){
if(sum2>sum1){
q1.push(q2.front());
sum1+=q2.front();
sum2-=q2.front();
q2.pop();
}else if(sum1>sum2){
q2.push(q1.front());
sum2+=q1.front();
sum1-=q1.front();
q1.pop();
}else{
flag=1;
break;
}
answer++;
}
if(flag==1){
return answer;
}else{
return -1;
}
}