끄적끄적 코딩
article thumbnail

그리디 문제입니다.

택배 배달과 수거를 할 때 최소 시간을 구해야합니다.

뒤에서부터 최대한 많이 처리하면서 오면 결과를 도출할 수 있습니다.

뒤에서부터 처리해야할 택배와 수거해야할 상자가 있는지 확인합니다.
있는 경우 몇번을 움직여야하는지 계산하고 해당 위치에 대한 시간을 결과값에 넣어줍니다.

택배를 배달하거나 수거해야하는 경우 해당 개수만큼 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;
  }
}

검색 태그