[프로그래머스] Lv.2 택배 배달과 수거하기 JAVA 풀이
문제 Lv.2 택배 배달과 수거하기
: 나열된 n개의 집에 택배를 배달
: 택배 상자 = 물류창고에 보관
( i번째 집은 물류창고에서 거리 i만큼 떨어져 있다 )
(또한 i번째 집은 j번째 집과 거리 j - i만큼 떨어져 있습니다. (1 ≤ i ≤ j ≤ n) )
: 트럭 허용 범위 = 최대 cap개의 박스 ( 각 집에 배달 및 수거할 때 원하는 개수만큼 가능 )
: 트럭은 재활용 택배 상자들을 실어 각 집에 배달하면서 빈 상자들을 수거해 물류창고에 돌아오는 최소 이동거리 구하기
<예시>
cap=4 일 때, 최소 거리로 이동하면서 5개의 집에 배달 및 수거
집1 | 집2 | 집3 | 집4 | 집5 | |
배달 | 1 | 0 | 3 | 1 | 2 |
수거 | 0 | 3 | 0 | 4 | 0 |
집1 | 집2 | 집3 | 집4 | 집5 | |
배달 / 수거 | 1/0 | 0/3 | 3/0 | 1/4 | 2/0 |
설 명 | 물류창고에서 택배 3개를 트럭에 싣고 출발 | ||||
배달 / 수거 | 1/0 | 0/3 | 3/0 | 0/4 | 0/0 |
설 명 | 물류창고 - 5번째 집까지 이동 (= 거리 5) 4번째 집에 택배 1개 배달, 5번째 집에 택배 2개 배달 |
||||
배달 / 수거 | 1/0 | 0/3 | 3/0 | 0/0 | 0/0 |
설 명 | 창고에 내리고 택배 4개를 트럭에 싣기 | ||||
배달 / 수거 | 0/0 | 0/3 | 0/0 | 0/0 | 0/0 |
설 명 | 물류창고 - 3번째 집까지 이동 (거리 3) 1번째 집에 택배 1개 배달, 3번째 집에 택배 3개 배달 |
||||
배달 / 수거 | 0/0 | 0/0 | 0/0 | 0/0 | 0/0 |
설 명 | 3번째 집 - 물류창고까지 이동 (거리 3) 2번째 집에 빈 택배 상자 3개 수거, 빈 택배 상자를 물류창고에 내립니다. |
16(=5+5+3+3)의 거리를 이동하면서 모든 배달 및 수거를 마쳤습니다
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int del = 0;
int pick = 0;
for (int i = n-1; i >= 0; i--) {
if (deliveries[i] > 0 || pickups[i] > 0) {
int cnt = 0;
while (del < deliveries[i] || pick < pickups[i]) {
cnt++;
del += cap;
pick += cap;
}
del -= deliveries[i];
pick -= pickups[i];
answer += (i+1) * cnt * 2;
}
}
return answer;
}
: public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int del = 0;
int pick = 0;
for (int i = n-1; i >= 0; i--) { 마지막 집부터 차례대로
if (deliveries[i] > 0 || pickups[i] > 0) { 배달 또는 수거해야할 집
int cnt = 0; 방문 횟수 초기화
while (del < deliveries[i] || pick < pickups[i]) { 상자의 개수가 현재 집 상자 개수보다 크다면 반복
cnt++; 현재 집에 방문해야 하는 횟수 측정
del += cap; 현재 집에서 배달, 수거 가능한 상자 개수 +
pick += cap; 한번 방문할 때 배달 또는 수거가 가능한 최대 개수 +
}
// 현재 집에 배달,수거를 한 이후
del -= deliveries[i];
pick -= pickups[i]; 물류센터로 돌아가지 않고 추가로 배달,수거를 할 수 있는 상자의 개수
answer += (i+1) * cnt * 2; 이동거리 계산
}
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/150369
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr