
๐ก ๋ฌธ์
๐ฏ ํ์ด ๊ณผ์
๋งค ๋จ์์๊ฐ(minute) ๋ง๋ค ์ฉ์ ์ค๋ ์ง์ ์ธ์ ํ 4๋ฐฉํฅ์ ์์นํ ์ค๋ ์ง๊ฐ ํจ๊ป ์ฉ๋๋ค๊ณ ํ ๋
์ฃผ์ด์ง grid
์์ ๋ชจ๋ ์ค๋ ์ง๊ฐ ์ฉ๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ผ๋ฐ์ ์ธ BFS
ํ์์์ ์ฝ๊ฐ์ ๋ณํ์ด ํ์ํ ์ ํ์
๋๋ค.
์ฉ์ ์ค๋ ์ง๋ฅผ queue
์ ๋ฃ์ด์ฃผ๊ณ queue
๊ฐ ๋น์ด์ง๋๊น์ง ๋ฐ๋ณตํด์ผ์ง
๊ฐ๊ฐ์ ๋จ์ ์๊ฐ๋ง๋ค ํ์ฌ queue
์ ๋ด๊ฒจ์๋ ์ค๋ ์ง๋ค์ ๋ํด BFS
๋ฅผ ํ ์ ์์ต๋๋ค.
๋ณดํต BFS
๋ฅผ ํ ๋ ์ค๋ณต ๋ฐฉ๋ฌธ์ ํผํ๊ธฐ ์ํด visit
๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ด์ฉํ๋๋ฐ,
์ฌ๊ธฐ์๋ ์ค๋ ์ง๊ฐ ์ฉ์ ์ํ์ผ ๋๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์์น๋ก ํ๋จ์ด ๊ฐ๋ฅํ๋ฏ๋ก
๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ์ํ ๋ณ๋์ ์๋ฃ๊ตฌ์กฐ๋ ๋ง๋ค์ด์ฃผ์ง ์๊ณ ์ํ๊ฐ์ผ๋ก ํ๋จํ๋๋ก ํ ์ ์์ต๋๋ค.
๐จโ๐ป ์ฝ๋
/**
* @param {number[][]} grid
* @return {number}
*/
var orangesRotting = function(grid) {
const [ROW, COL] = [grid.length, grid[0].length]
const dr = [1, -1, 0, 0]
const dc = [0, 0, 1, -1]
const queue = []
function preparation() {
for (let row = 0; row < ROW; row += 1) {
for (let col = 0; col < COL; col += 1) {
const isRotten = grid[row][col] === 2
if (isRotten) {
queue.push([row, col])
}
}
}
}
function outOfRange(row, col) {
return row < 0 || row >= ROW || col < 0 || col >= COL
}
function rottening() {
let minute = -1
while (queue.length > 0) {
let iterate = queue.length
while (iterate > 0) {
const [hr, hc] = queue.shift()
for (let dir = 0; dir < 4; dir += 1) {
const [nr, nc] = [dr[dir] + hr, dc[dir] + hc]
if (outOfRange(nr, nc)) {
continue
}
const isEmpty = grid[nr][nc] === 0
const isRotten = grid[nr][nc] === 2
if (isEmpty || isRotten) {
continue
}
grid[nr][nc] = 2 // now, adjacent orange is rottening
queue.push([nr, nc])
}
iterate -= 1
}
minute += 1
}
return minute
}
preparation()
const minute = rottening()
for (let row = 0; row < ROW; row += 1) {
for (let col = 0; col < COL; col += 1) {
const isFresh = grid[row][col] === 1
if (isFresh) {
return -1
}
}
}
return Math.max(minute, 0)
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 15 - 3Sum (Medium) (0) | 2023.04.24 |
---|---|
LeetCode 13 - Roman to Integer (Easy) (0) | 2023.04.24 |
LeetCode 24 - Swap Nodes in Pairs (Medium) (0) | 2023.02.20 |
LeetCode 35 - Search Insert Position (Easy) (0) | 2023.02.20 |
LeetCode 169 - Majority Element (Easy) (2) | 2023.02.05 |
๐ฌ ๋๊ธ