LeetCode #994

Rotting Oranges

1개의 풀이 · Python

문제 원문 보기 ↗

SOLUTION INFO

Python · main.py

main.py
from collections import deque


class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        N = len(grid)
        M = len(grid[0])

        dy = (-1, 1, 0, 0)
        dx = (0, 0, -1, 1)

        dq = deque()
        cnt = 0
        for i in range(N):
            for j in range(M):
                if grid[i][j] > 0:
                    cnt += 1
                if grid[i][j] == 2:
                    dq.append((i, j))

        if cnt == 0:
            return 0

        answer = -1
        while dq:
            dq_len = len(dq)
            answer += 1
            for _ in range(dq_len):
                y, x = dq.popleft()
                cnt -= 1
                for k in range(4):
                    qy, qx = y + dy[k], x + dx[k]
                    if 0 > qy or qy >= N or 0 > qx or qx >= M:
                        continue
                    if grid[qy][qx] == 1:
                        grid[qy][qx] = 2
                        dq.append((qy, qx))

        if cnt != 0:
            answer = -1

        return answer

SOLUTION DESCRIPTION

풀이 설명

처음부터 썩어 있는 모든 오렌지를 큐에 넣고 동시에 퍼져 나가는 다중 시작점 BFS를 수행한다. 한 BFS 레벨이 1분을 뜻하며, 새로 썩은 오렌지는 즉시 2로 표시해 중복 방문을 막는다. BFS가 끝난 뒤 처리되지 않은 오렌지가 남으면 -1을 반환한다. 시간과 공간 복잡도는 모두 O(NM)이다.

GITHUB COMMUNITY

커뮤니티 평가

GitHub 계정으로 남긴 최신 평가 1건만 반영하며, 데이터는 매일 저장소에 동기화됩니다.

최근 동기화

체감 난이도

아직 평가 없음

첫 난이도 평가를 남겨주세요.

문제 추천

아직 평가 없음

이 문제가 도움이 되었는지 알려주세요.

이 문제 평가하기

GitHub 로그인 후 난이도를 제출하고, 원하는 경우 추천 여부도 함께 남길 수 있습니다.

추천 여부 (선택)

평가하려면 GitHub로 로그인해 주세요.

평가는 자동으로 저장소 Discussion에 기록되므로 Discussion 화면을 직접 열 필요가 없습니다. 같은 문제를 다시 평가하면 기존 평가가 갱신됩니다.

DISCUSSION

댓글

GitHub 로그인 후 작성할 수 있으며 모든 댓글은 이 저장소의 Discussions에 보관됩니다.