겉으로는 어려워보이지만, 원리만 이해한다면 쉬운 문제였다.... 나는 그 원리를 찾지 못해서.... 오래걸렸다. 우선 가장 먼 곳부터 갔다가 오는게 당연하다. deliveries에서 0이 아닌 가장 먼 곳의 인덱스를 찾고 pickups에서 0이 아닌 가장 먼 곳의 인덱스를 찾자. 이 두 인덱스중에서 더 먼곳을 찾아서 배달하고 수거하는 과정을 거치면 된다.
// deliveris에서 0이 아닌 가장 먼 인덱스(p1)를 찾자
// 그 인덱스로 부터 -1하면서 cap을 넘어가지 않도록 pop
// pickups에서 0이 아닌 가장 먼 인덱스(p2)를 찾자
// 그 인덱스로부터 -1하면서 cap을 넘어가지 않도록 pop
function solution(cap, n, deliveries, pickups) {
var answer = 0;
while(deliveries.length != 0 || pickups.length !=0){
let p1 = deliveries.length -1;
let p2 = pickups.length -1;
let go = cap;
let come = cap;
//갈 곳중에 제일 먼 곳 => p1
while(1){
if(deliveries[p1] === 0){
deliveries.pop();
p1--
}else{
break;
}
}
let a = p1;
while(go != 0 && a>=0){
if(deliveries[a] ===0){
a--;
}else{
deliveries[a]--;
go--;
}
}
while(1){
if(pickups[p2] === 0){
pickups.pop()
p2--
}else{
break;
}
}
let b = p2;
while(come != 0 && b >=0){
if(pickups[b] ===0){
b--;
}else{
pickups[b]--;
come--;
}
}
if(p1 > p2){
answer += (p1+1)*2
}else{
answer += (p2+1)*2;
}
}
return answer
}
생각보다 쉬운 문제였지만, 원리를 이해하지 못하여 오래걸렸던 문제이다.... 문제를 최대한 쉽게쉽게 생각하려고 노력해야겠다.