994. Rotting Oranges
2021. 10. 30. 02:28ㆍLeetcode
Description:
You are given an m x n grid where each cell can have one of three values:
- 0 representing an empty cell,
- 1 representing a fresh orange, or
- 2 representing a rotten orange.
Every minute, any fresh orange that is 4-directionally adjacent to a rotten orange becomes rotten.
Return the minimum number of minutes that must elapse until no cell has a fresh orange. If this is impossible, return -1.

'''
[1] bfs)
idea::
0. when don't consider all 2, step will be weird
1. find all 2 and push row index and col index of 2 to queue
2. if there is no 2 ==> if there is 1 return -1, else return 0
3. from all 2, start rotting, calculate step by bfs
4. after, find remaining 1
5. if there is 1, return -1, else return step
code::
(below)
- m==len(grid), n==len(grid[0])
-T/C: O(m*n) # O(m*n) for finding all 2, O(m*n) for bfs, O(m*n) for finding remaining 1
-S/C: O(m*n) # when all grid[r][c]==2, then queue size will be m*n
'''
from collections import deque
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
m=len(grid)
n=len(grid[0])
queue=deque()
# find all 2 and push row index and col index to queue
# if there is no 2 -> if there is 1 return -1, else return 0
flag_1=False
for r in range(m):
for c in range(n):
if grid[r][c]==2:
queue.append([r,c])
if grid[r][c]==1:
flag_1=True
if len(queue)==0:
if not flag_1:
return 0
step=-1
while queue:
step+=1
size=len(queue)
for time in range(size):
cur=queue.popleft()
# above
if cur[0]-1>=0 and grid[cur[0]-1][cur[1]]==1:
queue.append([cur[0]-1,cur[1]])
grid[cur[0]-1][cur[1]]=2
# below
if cur[0]+1<m and grid[cur[0]+1][cur[1]]==1:
queue.append([cur[0]+1,cur[1]])
grid[cur[0]+1][cur[1]]=2
# left
if cur[1]-1>=0 and grid[cur[0]][cur[1]-1]==1:
queue.append([cur[0],cur[1]-1])
grid[cur[0]][cur[1]-1]=2
# right
if cur[1]+1<n and grid[cur[0]][cur[1]+1]==1:
queue.append([cur[0],cur[1]+1])
grid[cur[0]][cur[1]+1]=2
for r in range(m):
for c in range(n):
if grid[r][c]==1:
return -1
return step
'Leetcode' 카테고리의 다른 글
152. Maximum Product Subarray (0) | 2021.11.02 |
---|---|
34. Find First and Last Position of Element in Sorted Array (0) | 2021.10.30 |
121. Best Time to Buy and Sell Stock (0) | 2021.10.29 |
217. Contains Duplicate (0) | 2021.10.29 |
222. Count Complete Tree Nodes (0) | 2021.10.28 |