728x90
그리디 문제입니다.
택배 배달과 수거를 할 때 최소 시간을 구해야합니다.
뒤에서부터 최대한 많이 처리하면서 오면 결과를 도출할 수 있습니다.
뒤에서부터 처리해야할 택배와 수거해야할 상자가 있는지 확인합니다.
있는 경우 몇번을 움직여야하는지 계산하고 해당 위치에 대한 시간을 결과값에 넣어줍니다.
택배를 배달하거나 수거해야하는 경우 해당 개수만큼 delivery변수와 pickup변수에 빼줍니다.
두 변수가 다시 0보다 클 때 까지 cap을 더해줍니다. ( 몇번 반복해서 이동해야하는지 구하는 중)
전부 계산했다면 시간을 계산해서 결과값에 추가
위의 과정을 반복해주었습니다.
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int del = 0;
int pic = 0;
for (int i = n - 1; i >= 0; i--) {
int cnt = 0;
del -= deliveries[i];
pic -= pickups[i];
while (del < 0 || pic < 0) {
del += cap;
pic += cap;
++cnt;
}
answer += (i + 1) * 2 * cnt;
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 붕대 감기 (0) | 2025.01.02 |
---|---|
[Java] 프로그래머스 - 입국심사 (0) | 2023.08.28 |
[Java] 백준 2617번 구슬 찾기 (1) | 2023.08.27 |
[Java] 백준 1863번 스카이라인 쉬운거 (0) | 2023.08.27 |
[Java] 백준 2792번 보석 상자 (0) | 2023.08.23 |