2023 KAKAO BLIND RECRUITMENT / 택배 배달과 수거하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

총합 거리를 누적할 때 int 범위를 초과하는 점 주의하셔야합니다.

class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        int idx = n - 1;
        int deliveryIdx = idx;
        int pickupIdx = idx;
        long totalDistance = 0;
        
        while (idx >= 0) {
            int delivery = deliveries[idx];
            int pickup = pickups[idx];
            if (delivery == 0 && pickup == 0) {
                idx--;
                continue;
            }
            totalDistance += (idx + 1) * 2;
            deliveryIdx = move(deliveries, deliveryIdx, cap);
            pickupIdx = move(pickups, pickupIdx, cap);
            idx = Math.max(deliveryIdx, pickupIdx);
        }
        
        return totalDistance;
    }
    
    private int move(int[] houses, int idx, int cap) {
        if (idx < 0) {
            return -1;
        }
        
        while (idx >= 0 && cap > 0) {
            int amount = houses[idx];
            if (amount <= cap) {
                cap -= amount;
                houses[idx--] = 0;
                continue;
            }
            houses[idx] -= cap;
            break;
        }
        
        return idx;
    }
}
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유