[문제]
코딩테스트 연습 - 두 큐 합 같게 만들기 | 프로그래머스 스쿨 (programmers.co.kr)
[문제 풀이]
두 포인터(투 포인터)를 이용해서 쉽게 정답이 유추가 되는 문제였다.
우선 qeuue1, queue2 배열의 모든 원소를 더한 숫자를 먼저 ans1, ans2로 만들어주자.
그리고 두 배열의 모든 원소가 들어가있는 벡터 vec를 만들어주자.
이제 0부터 시작하는 start 변수와 queue1의 크기(index는 0부터 시작이니 queue1의 크기라는건 queue2의 첫번째 원소이다.) 값이 들어가있는 end 변수를 만들어주자.
이제 두 포인터를 이용해서 반복문을 돌리고 만일 end가 vec의 크기만큼 커지거나 ans1, ans2 변수의 크기가 같아지면 종료를 해주자.
[회고]
두 포인터가 쉽게 연상이 되었는데 두개의 배열에서 해본건 처음이라 구현부분에서 처음에 살짝 헤매었었다.
실제 코테에서 못 풀만한 문제는 아니지만 헷갈리면 시간을 뺏길만한 문제이니 주의하자.
[코드]
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int solution(vector<int> queue1, vector<int> queue2) {
int answer = -1;
//투포인터로 합의 일치 확인.
vector<int> vec;
long long ans1 = 0;
long long ans2 = 0;
for(int i = 0; i<queue1.size();i++){
vec.push_back(queue1[i]);
ans1 += queue1[i];
}
for(int i = 0;i<queue2.size();i++){
vec.push_back(queue2[i]);
ans2 += queue2[i];
}
int start = 0;
int end = queue1.size();
int count = 0;
while(start < end && end <= vec.size()){
// cout<<"ans : "<<ans1<<" "<<ans2<<endl;
if(ans1 < ans2){
ans1 += vec[end];
ans2 -= vec[end];
end++;
}
else if(ans1 > ans2){
ans1 -= vec[start];
ans2 += vec[start];
start++;
}
else if(ans1 == ans2){
//상황종료.
answer = count;
break;
}
count++;
}
return answer;
}