aboutsummaryrefslogtreecommitdiff
path: root/min_time_collect_garbage.c
blob: 82ca6ba39bc2904fb86f90e4ace772b65247fe0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 2391. Minimum Amount of Time to Collect Garbage
#include "leetcode.h"

/*
 * given a 0-indexed array of strings 'garbage' where 'garbage[i]' represents
 * the assortment of garbage at the i'th house. 'garbage[i]' consists of only
 * characters 'M, P, and G' representing one unit of metal, paper, and glass
 * garbage respectively. picking up one unitof any type of garbage takes 1
 * minute. you are also given a 0-indexed integer array 'travel' where
 * 'travel[i]' is the number of minutes needed to go from house 'i' to house 'i
 * + 1'. there are three garbage trucks in the city, each responsible for
 * picking up one type of garbage. each garbage truck starts at house 0 and must
 * visit each house in order, however they do not need to visit every house.
 * only one garbage truck may be used at any given moment. while one truck is
 * driving or picking up garbage, the other two trucks cannot do anything.
 * return the minimum number of minutes needed to pick up all the garbage.
 */

int garbageCollection(char **garbage, int garbage_size, int *travel,
                      int travel_size) {
  int total_bag = 0, len, ans = 0;
  bool m = false, p = false, g = false;
  for (int i = garbage_size - 1; i >= 0; i--) {
    len = strlen(garbage[i]);
    total_bag += len;
    if (!m || !p || !g) {
      for (int j = 0; j < len; j++) {
        if (!m && garbage[i][j] == 'M') {
          m = 1;
          for (int k = i - 1; k >= 0; k--)
            ans += travel[k];
        } else if (!p && garbage[i][j] == 'P') {
          p = 1;
          for (int k = i - 1; k >= 0; k--)
            ans += travel[k];
        } else if (!g && garbage[i][j] == 'G') {
          g = 1;
          for (int k = i - 1; k >= 0; k--)
            ans += travel[k];
        }
      }
    }
  }
  ans += total_bag;
  return ans;
}