택배 배달과 수거하기

Jobmania·2023년 1월 26일
0

문제

택배기사가 배달과 수거를 할때 최소의 이동거리를 구하는 것이다.
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개의 댓글