택배 배달과 수거하기

Jobmania·2023년 1월 26일

문제

택배기사가 배달과 수거를 할때 최소의 이동거리를 구하는 것이다.
1. 먼거리를 이동하는 와중에 중간배달지에서 작업이 가능하고
2. 택배 cap은 존재하므로 갈때 최대 올때 최대로 들고오고 내려야 한다.

결국 먼 거리부터 택배를 진행해야 거리를 최소화 할 수 있다.
택배 상자는 최대한 많이 들고간다. 그리고 해당 배열보다 초과일시 i-1배열에 이월한다.

 public long solution(int cap, int n, int[] deliveries, int[] pickups) {

        long answer = 0;

        for(int i = n-1 ; i >-1 ; i--){     // 끝에서부터 시작 해당 위치에 0, 0 일 때까지
            while (deliveries[i] > 0 || pickups[i] > 0){
                deliveries[i] -= cap;
                pickups[i] -= cap;
                answer += 2 *(i+1);
            } // ok

            if(i==0) break; // i= 0 일시 아래에서 배열 에러발생.

            // 초과분에 대해서 i-1에 이월하여 해결.

            if(deliveries[i]<0){
                deliveries[i-1] += deliveries[i];
                deliveries[i] = 0;
            }

            if(pickups[i]<0){
                pickups[i-1] += pickups[i]; ///[8 0 0 0 0 10 ]
                pickups[i] = 0 ;
            }
        }

        System.out.println(Arrays.toString(deliveries));
        System.out.println(Arrays.toString(pickups));
        return answer;
    }

처음 풀 때는 택배상자를 일일히 비교하다보니 그 부분때문에 시간이 많이 걸렸는데, 하지만 문제의 요구사항은 거리이므로 끝배열의 택배및 수거가 완료되어있는지 확인만 하는 로직으로 변경하여 정상적으로 수행되었다.

profile
HelloWorld에서 RealWorld로

0개의 댓글