aboutsummaryrefslogtreecommitdiff
path: root/num_laser_beams_bank.c
blob: 1b0b47681bd5e58e69e04a05725c2fcf585f0041 (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
// 2125. Number of Laser Beams in a Bank
#include "leetcode.h"

/*
 * anti-theft security devices are activated inside a bank. you are given a
 * 0-indexed binary string array 'bank' representing the floor plan of the bank,
 * which is an 'm x n' 2d matrix. 'bank[i]' represents the i'th row, consisting
 * of '0's and '1's. '0' means the cell is empty, while '1' means the cell has a
 * security device. there is one laser beam between any two security devices if
 * both conditions are met. the two devices are located on two different rows
 * 'r1' and 'r2', where 'r1 < r2'. for each row 'i' where 'r1 < i < r2' there
 * are no security devices in the i'th row. laser beams are independent. return
 * the total number of laser beams in the bank.
 */

int numberOfBeams(char **bank, int bank_size) {
  int ans = 0, start = 0;
  for (int i = 0; i < bank_size; i++) {
    int n = 0;
    for (int j = 0;; j++) {
      if (!bank[i][j])
        break;
      else if (bank[i][j] == '1')
        n++;
    }
    if (n) {
      if (start)
        ans += start * n;
      start = n;
    }
  }
  return ans;
}

int main() {
  char **b1 = {"011001", "000000", "010100", "001000"};
  char **b2 = {"000", "111", "000"};
  printf("%d\n", numberOfBeams(b1, 4)); // expect: 8
  printf("%d\n", numberOfBeams(b2, 3)); // expect: 0
}