https://school.programmers.co.kr/learn/courses/30/lessons/150369#
접근 방법
매 순간 최적의 선택을 통해 문제를 해결해 나가는 그리디 유형이다.
먼 곳의 택배의 갯수를 매번 최적으로 가져오면 최소한의 이동거리를 얻을 수 있다.
멀리 있는 지점부터 시작해 트럭의 용량만큼 배달하고, 용량이 허용하는 한 수거작업 또한 진행한다.
import java.util.*;
class Solution {
public int update(int pointer, int[] arr, int cap){
int sum = 0;
while(pointer >= 0 && sum < cap){
sum += arr[pointer];
arr[pointer--] = 0;
}
if(sum > cap){
arr[++pointer] = sum - cap;
}
return pointer;
}
//탐욕법
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int dPointer = n-1;
int pPointer = n-1;
while(dPointer >= 0 || pPointer >= 0){
while(dPointer >= 0 && deliveries[dPointer] == 0) dPointer--;
while(pPointer >= 0 && pickups[pPointer] == 0) pPointer--;
answer += (Math.max(dPointer, pPointer)+1)*2;
dPointer = update(dPointer, deliveries, cap);
pPointer = update(pPointer, pickups, cap);
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
다익스트라 알고리즘 (1) | 2024.10.03 |
---|---|
프로그래머스 광고삽입 [JAVA] (0) | 2024.10.02 |
백준 2579 계단 오르기 [JAVA] (0) | 2024.09.30 |
백준 3190 뱀 [JAVA] (1) | 2024.09.26 |
백준 1427 소트인사이드 [JAVA] (0) | 2024.09.26 |