물음표 살인마의 개발블로그

알고리즘 문제/Leetcode

733. Flood Fill

BEstyle 2023. 3. 23. 14:08

An image is represented by an m x n integer grid image where image[i][j] represents the pixel value of the image.

You are also given three integers sr, sc, and color. You should perform a flood fill on the image starting from the pixel image[sr][sc].

To perform a flood fill, consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color), and so on. Replace the color of all of the aforementioned pixels with color.

Return the modified image after performing the flood fill.

 

Example 1:

Input: image = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, color = 2
Output: [[2,2,2],[2,2,0],[2,0,1]]
Explanation: From the center of the image with position (sr, sc) = (1, 1) (i.e., the red pixel), all pixels connected by a path of the same color as the starting pixel (i.e., the blue pixels) are colored with the new color.
Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel.

Example 2:

Input: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0
Output: [[0,0,0],[0,0,0]]
Explanation: The starting pixel is already colored 0, so no changes are made to the image.

 

Constraints:

  • m == image.length
  • n == image[i].length
  • 1 <= m, n <= 50
  • 0 <= image[i][j], color < 216
  • 0 <= sr < m
  • 0 <= sc < n

#https://leetcode.com/problems/flood-fill/description/

'''
1. 아이디어 :
    dfs로 풀 수 있다.
2. 시간복잡도 :
    O(m*n)
3. 자료구조 :
    리스트, 해시셋
'''


class Solution:
    def floodFill(self, image: List[List[int]], sr: int, sc: int, color: int) -> List[List[int]]:
        r=len(image)
        c=len(image[0])

        target=image[sr][sc]


        visited=set()
        def dfs(x,y):
            if x<0 or y<0 or x==r or y==c or (x,y) in visited or image[x][y]!=target:
                return

            visited.add((x,y))
            image[x][y]=color

            dfs(x-1,y)
            dfs(x+1,y)
            dfs(x,y-1)
            dfs(x,y+1)

        dfs(sr,sc)

        return image

'알고리즘 문제 > Leetcode' 카테고리의 다른 글

290. Word Pattern  (0) 2023.03.23
1200. Minimum Absolute Difference  (0) 2023.03.23
520. Detect Capital  (0) 2023.03.23
207. Course Schedule  (0) 2023.03.19
129. Sum Root to Leaf Numbers  (0) 2023.03.16