Skip to content

Commit 827f5bf

Browse files
committed
Time: 397 ms (55.1%), Space: 40.2 MB (37.24%) - LeetHub
1 parent 9159ae6 commit 827f5bf

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# time complexity: O(m*n)
2+
# space complexity: O(m*n)
3+
from collections import deque
4+
from typing import List
5+
6+
7+
class Solution:
8+
Guarded = 0
9+
Unguarded = 1
10+
Guard = 2
11+
Wall = 3
12+
13+
def countUnguarded(self, m: int, n: int, guards: List[List[int]], walls: List[List[int]]) -> int:
14+
ROW = m
15+
COL = n
16+
board = [[self.Unguarded] * COL for _ in range(ROW)]
17+
queue = deque()
18+
for i, j in guards:
19+
board[i][j] = self.Guard
20+
queue.append((i, j))
21+
for i, j in walls:
22+
board[i][j] = self.Wall
23+
while queue:
24+
currR, currC = queue.popleft()
25+
26+
for r in range(currR - 1, -1, -1):
27+
if board[r][currC] == self.Wall or board[r][currC] == self.Guard:
28+
break
29+
board[r][currC] = self.Guarded
30+
31+
for r in range(currR + 1, ROW):
32+
if board[r][currC] == self.Wall or board[r][currC] == self.Guard:
33+
break
34+
board[r][currC] = self.Guarded
35+
36+
for c in range(currC - 1, -1, -1):
37+
if board[currR][c] == self.Wall or board[currR][c] == self.Guard:
38+
break
39+
board[currR][c] = self.Guarded
40+
41+
for c in range(currC + 1, COL):
42+
if board[currR][c] == self.Wall or board[currR][c] == self.Guard:
43+
break
44+
board[currR][c] = self.Guarded
45+
46+
return sum([board[i].count(1) for i in range(ROW)])
47+
48+
49+
m = 4
50+
n = 6
51+
guards = [[0, 0], [1, 1], [2, 3]]
52+
walls = [[0, 1], [2, 2], [1, 4]]
53+
print(Solution().countUnguarded(m, n, guards, walls))
54+
55+
m = 3
56+
n = 3
57+
guards = [[1, 1]]
58+
walls = [[0, 1], [1, 0], [2, 1], [1, 2]]
59+
print(Solution().countUnguarded(m, n, guards, walls))

0 commit comments

Comments
 (0)