2257. Count Unguarded Cells in the Grid

Difficulty:
Related Topics:
Similar Questions:

Problem

You are given two integers m and n representing a 0-indexed m x n grid. You are also given two 2D integer arrays guards and walls where guards[i] = [rowi, coli] and walls[j] = [rowj, colj] represent the positions of the ith guard and jth wall respectively.

A guard can see every cell in the four cardinal directions (north, east, south, or west) starting from their position unless obstructed by a wall or another guard. A cell is guarded if there is at least one guard that can see it.

Return** the number of unoccupied cells that are not guarded.**

  Example 1:

Input: m = 4, n = 6, guards = [[0,0],[1,1],[2,3]], walls = [[0,1],[2,2],[1,4]]
Output: 7
Explanation: The guarded and unguarded cells are shown in red and green respectively in the above diagram.
There are a total of 7 unguarded cells, so we return 7.

Example 2:

Input: m = 3, n = 3, guards = [[1,1]], walls = [[0,1],[1,0],[2,1],[1,2]]
Output: 4
Explanation: The unguarded cells are shown in green in the above diagram.
There are a total of 4 unguarded cells, so we return 4.

  Constraints:

Solution (Java)

class Solution {
    public int countUnguarded(int m, int n, int[][] guards, int[][] walls) {
        char[][] matrix = new char[m][n];
        int result = 0;
        for (int i = 0; i <= guards.length - 1; i++) {
            int guardRow = guards[i][0];
            int guardCol = guards[i][1];
            matrix[guardRow][guardCol] = 'G';
        }
        for (int i = 0; i <= walls.length - 1; i++) {
            int wallRow = walls[i][0];
            int wallCol = walls[i][1];
            matrix[wallRow][wallCol] = 'W';
        }
        for (int i = 0; i <= guards.length - 1; i++) {
            int currentRow = guards[i][0];
            int currentCol = guards[i][1] - 1;
            while (currentCol >= 0) {
                if (matrix[currentRow][currentCol] != 'W'
                        && matrix[currentRow][currentCol] != 'G') {
                    matrix[currentRow][currentCol] = 'R';
                } else {
                    break;
                }
                currentCol--;
            }
            currentRow = guards[i][0];
            currentCol = guards[i][1] + 1;
            while (currentCol <= n - 1) {
                if (matrix[currentRow][currentCol] != 'W'
                        && matrix[currentRow][currentCol] != 'G') {
                    matrix[currentRow][currentCol] = 'R';
                } else {
                    break;
                }
                currentCol++;
            }
            currentRow = guards[i][0] - 1;
            currentCol = guards[i][1];
            while (currentRow >= 0) {
                if (matrix[currentRow][currentCol] != 'W'
                        && matrix[currentRow][currentCol] != 'G') {
                    matrix[currentRow][currentCol] = 'R';
                } else {
                    break;
                }
                currentRow--;
            }
            currentRow = guards[i][0] + 1;
            currentCol = guards[i][1];
            while (currentRow <= m - 1) {
                if (matrix[currentRow][currentCol] != 'W'
                        && matrix[currentRow][currentCol] != 'G') {
                    matrix[currentRow][currentCol] = 'R';
                } else {
                    break;
                }
                currentRow++;
            }
        }
        for (int i = 0; i <= m - 1; i++) {
            for (int j = 0; j <= n - 1; j++) {
                if (matrix[i][j] != 'R' && matrix[i][j] != 'G' && matrix[i][j] != 'W') {
                    result++;
                }
            }
        }
        return result;
    }
}

Explain:

nope.

Complexity: