문제
https://school.programmers.co.kr/learn/courses/30/lessons/118667#
pop과 push를 해서 주어진 두 큐의 합을 같게 만드는 문제였다.
문제 풀이
따로 큐를 만들어 사용하진 않고 주어진 벡터에 push_back 하며 index를 옮겨서 풀었다.
계속 3번, 5번 테케가 틀려서 왜그런가 했는데.. 맨 처음 합을 구하는 for문에서 i<=queueSize로 돌려서...ㅎㅎ 이거 찾는데 30분이나 걸렸다 ㅠㅠ 다른 곳에서 문제가 생긴 줄 알고 while 부분만 계속 고쳤는데.. 앞으로 이런 실수는 정말 하지 말자!!
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> queue1, vector<int> queue2) {
int answer = 0;
long long sum1, sum2;
int index1, index2;
int queueSize = queue1.size();
sum1 = sum2 = index1 = index2 = 0;
for(int i=0;i<queueSize;i++){
sum1 += queue1[i];
sum2 += queue2[i];
}
if((sum1+sum2)%2 != 0) return -1;
//printf("sum1: %d sum2: %d index1: %d index2: %d count: %d\n", sum1, sum2, index1, index2, answer);
while(1) {
if(answer > (queueSize*3)) return -1;
if(sum1 > sum2){
sum1-=queue1[index1];
sum2+=queue1[index1];
queue2.push_back(queue1[index1]);
index1++;
}
else if(sum1 < sum2){
sum2-=queue2[index2];
sum1+=queue2[index2];
queue1.push_back(queue2[index2]);
index2++;
}
else{
break;
}
answer++;
//printf("sum1: %d sum2: %d index1: %d index2: %d count: %d\n", sum1, sum2, index1, index2, answer);
}
return answer;
}