[프로그래머스] Lv2. 택배 배달과 수거하기- JavaScript

이상돈·2023년 3월 27일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 택배 배달과 수거하기

문제

제한사항

📌 내가 생각한 풀이

겉으로는 어려워보이지만, 원리만 이해한다면 쉬운 문제였다.... 나는 그 원리를 찾지 못해서.... 오래걸렸다. 우선 가장 먼 곳부터 갔다가 오는게 당연하다. 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
    
}

📌 느낀점

생각보다 쉬운 문제였지만, 원리를 이해하지 못하여 오래걸렸던 문제이다.... 문제를 최대한 쉽게쉽게 생각하려고 노력해야겠다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글