
이것을 보면 딱봐도 슬라이딩 윈도우 문제라는것을 알수 있다. 두큐를 일렬로 세운다음 . > 슬라이딩 윈도우 로 풀어야 시간 오류가 나지않는다.

제한사항이 30만이기 때문에 for 문을 한번 돌려야한다.
시간 오류가 발생하기 때문에 , queue1 를 기준으로 3번 돌린다는 가정으로 한다.
function solution(queue1, queue2) {
// 슬라이딩 윈도우 기법같은디
//
var concat__qula= queue1.concat(queue2);
var first_queal=queue1.reduce((acc, cur) => { return acc += cur; }, 0);
var second_queal=queue2.reduce((acc, cur) => { return acc += cur; }, 0); var total_count=-1;
var final= Math.floor( (first_queal+second_queal)/2);
if( Math.floor((first_queal+second_queal) %2)==1){
return -1;
}
var front=0;
var back=queue1.length-1;
while(front< concat__qula.length){
total_count+=1;
if(first_queal==final){
break;
}
if(first_queal<final) {
back+=1;
first_queal+=concat__qula[back];
continue;
}
if(first_queal>final){
first_queal-=concat__qula[front];
front+=1;
continue;
}
}
return (total_count==concat__qula.length+1 ?-1:total_count)
}
28번에서 시간 오류가 나서 다시 풀게 되었다.
다른 사람 코드를 참조했다.
function solution(queue1, queue2) {
// 슬라이딩 윈도우 기법같은디
//
var concat__qula= queue1.concat(queue2);
var first_queal=queue1.reduce((acc, cur) => { return acc += cur; }, 0);
var second_queal=queue2.reduce((acc, cur) => { return acc += cur; }, 0); var total_count=-1;
var final= Math.floor( (first_queal+second_queal)/2);
if( Math.floor((first_queal+second_queal) %2)==1){
return -1;
}
var front=0;
var back=queue1.length-1;
for(var i=0; i<queue1.length*3; i++){
if(first_queal==final){
return i;
}
if(first_queal<final) {
back+=1;
first_queal+=concat__qula[back];
continue;
}
if(first_queal>final){
first_queal-=concat__qula[front];
front+=1;
continue;
}
}
return -1
}
하나빼고 하나넣고를 각각 count 하기 때문에 continue를 줘서 i 를 증가하는식으로 두었다.
슬라이딩 윈도우 방식을 이용해서 기준이 되는 큐가 작으면 back 플러스하고 큰경우 뒤에있는 front 포인터를 삭제해준다. 이런식으로 가면 정답이 나온다.