https://school.programmers.co.kr/learn/courses/30/lessons/118667
지하철에서 풀었다. 어려운 문제는 아닌데 while(tmp <= N * 3)이 구문이 중요하다. 한 개의 큐에서 값을 다 빼고 2배가 된 다른 큐에서 값을 가져와야 하는 경우가 있기 때문에 큐가 2개라고 n*2를 하면 안된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> queue1, vector<int> queue2) {
int answer = -2;
queue<long long> q1, q2;
long long sum_q1 = 0, sum_q2 = 0;
long long num_goal = 0;
int N = queue1.size();
for(int i = 0; i < N; ++i)
{
long long num_q1 = (long long)queue1[i];
long long num_q2 = (long long)queue2[i];
sum_q1 += num_q1;
sum_q2 += num_q2;
q1.push(num_q1);
q2.push(num_q2);
}
num_goal = (sum_q1 + sum_q2) / 2;
int tmp = 0;
while(tmp <= N * 3)
{
// sum_q1과 sum_q2가 같아야 함.
if(sum_q1 == sum_q2) break;
else if(sum_q1 < sum_q2 && !q2.empty())
{
sum_q1 += q2.front();
sum_q2 -= q2.front();
q1.push(q2.front());
q2.pop();
++tmp;
}
else if(sum_q1 > sum_q2 && !q1.empty())
{
sum_q1 -= q1.front();
sum_q2 += q1.front();
q2.push(q1.front());
q1.pop();
++tmp;
}
}
if(tmp == N * 3 + 1) tmp = -1;
return answer = tmp;
}