[프로그래머스, 150369] 택배 배달과 수거하기 (java)
Problem Solving/Programmers

[프로그래머스, 150369] 택배 배달과 수거하기 (java)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/150369

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

728x90

메모리: 83.4 MB, 시간: 20.63 ms

사용 알고리즘: 구현

class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = 0;
        
        // 가장 뒤에 있는 배달지
        int lastDelivery = -1;
        for(int i = n - 1; i >= 0; i--) {
            if(deliveries[i] != 0) {
                lastDelivery = i;
                break;
            }
        }
        
        // 가장 뒤에 있는 수거지
        int lastPickup = -1;
        for(int i = n - 1; i >= 0; i--) {
            if(pickups[i] != 0) {
                lastPickup = i;
                break;
            }
        }
        
        // 맨 뒤 집부터 cap만큼 배달 & 수거
        int dCap, pCap;
        while(lastDelivery >= 0 || lastPickup >= 0) {
            
            answer += Math.max(lastDelivery + 1, lastPickup + 1) * 2;
            
            dCap = cap;
            pCap = cap;
            
            for(int i = lastDelivery; i >= 0; i--) {
                if(deliveries[i] <= dCap) {
                    dCap -= deliveries[i];
                    lastDelivery--;
                }
                else {
                    deliveries[i] -= dCap;
                    break;
                }
            }
            
            for(int i = lastPickup; i >= 0; i--) {
                if(pickups[i] <= pCap) {
                    pCap -= pickups[i];
                    lastPickup--;
                }
                else {
                    pickups[i] -= pCap;
                    break;
                }
            }
        }
        
        return answer;
    }
}
728x90