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

코린이·2023년 6월 9일
0

프로그래머스

목록 보기
22/22

📢 [2023 KAKAO BLIND RECRUITMENT] 택배 배달과 수거

프로그래머스 문제 링크

풀이

사용언어 : Java

그리디 알고리즘사용
1. 가장 먼 곳부터 배달과 수거를 수행한다.
2. 상자가 cap보다 많아지면 배달과 수거를 그만두고 돌아온다.
3. 집의 배달과 수거가 완료가 되면 current(방문할 집 변수)값을 -1 해준다.
4. answer(이동거리) 는 (current(방문할 집) +1 ) * 2를 더해준다.

  • idx라 +1 해주기
  • 다시 물류창고로 돌아와야 하기 때문에 *2 를 해준다.
class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        // 그리디 알고리즘
        long answer = 0;
        
        // 방문할 집 (가장 먼 곳)
        int current = n-1;
        
        int[] deliveries2 = deliveries.clone();
        int[] pickups2 = pickups.clone();
        while(current >= 0) {
            if(pickups2[current] == 0 && deliveries2[current] == 0){
                current--;   
                continue;
            }
            answer += (current+1) * 2;
            // 배달
            int deliverBox = 0;
            for(int i = current; i >= 0 ; i--) {
                if(deliveries2[i]+deliverBox > cap) {
                    deliveries2[i] -= cap - deliverBox;
                    break;
                }
                deliverBox += deliveries2[i];
                deliveries2[i] = 0;
            }
            
            // 수거
            int pickBox = 0;
            for(int i = current; i >= 0 ; i--) {
                if(pickups2[i]+pickBox > cap) {
                    pickups2[i] -= cap - pickBox;
                    break;
                }
                pickBox += pickups2[i];
                pickups2[i] = 0;
            }
            
            if(pickups2[current] == 0 && deliveries2[current] == 0){
                current--;   
            }
            
        }

        return answer;
    }
}
profile
초보 개발자

0개의 댓글