[LeetCode] Flood Fill

아르당·2026년 2월 20일

LeetCode

목록 보기
162/213
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

주어진 이미지는 m x n 크기의 정수 격자로 표현되며, image[i][j]는 이미지의 픽셀 값을 나타낸다. 또한 세 개의 정수 sr, sc, color가 주어진다. 목표는 image[sr][sc] 픽셀부터 시작하여 이미지 전체에 플러드 필을 수행하는 것이다.
플러드 필 수행하는 것

  1. 시작 픽셀부터 시작하여 해당 픽셀의 색상을 원하는 색으로 변경한다.
  2. 시작 픽셀과 직접적으로 인접한 픽셀(가로 또는 세로로 한 변을 공유하는 픽셀) 중 시작 픽셀과 동일한 색상을 가진 각 픽셀에 대해 동일한 과정을 수행한다.
  3. 업데이트된 픽셀의 인접 픽셀을 확인하고, 해당 픽셀의 색상이 시작 픽셀의 원래 생삭과 일치하는 경우 색상을 수정하는 과정을 반복한다.
  4. 업데이트할 원래 색상의 인접 픽셀이 더 이상 없을 때 프로세스가 중지된다.

플러드 필 수행 이후 수정된 이미지를 반환해라.

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:

이미지의 중심 위치 (sr, sc) = (1, 1)(즉, 빨간색 픽셀)에서 시작하여 시작 픽셀과 동일한 색상의 경로로 연결된 모든 픽셀(즉, 파란색 픽셀)은 새로운 색상으로 칠해진다.

#2
Input: image = [[0, 0, 0], [0, 0, 0]], sr = 0, sc = 0, color = 0
Output: [[0, 0, 0], [0, 0, 0]]
Explanation:
시작 픽셀은 이미 목표 색상과 동일한 0으로 칠해져 있다. 따라서 이미지에는 아무런 변경사항이 적용되지 않는다.

Constraints

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

Solved

class Solution {
    public int[][] floodFill(int[][] image, int sr, int sc, int color) {
        if(image[sr][sc] == color) return image;

        fill(image, sr, sc, color, image[sr][sc]);

        return image;
    }

    private void fill(int[][] image, int sr, int sc, int color, int cur){
        if(sr < 0 || sr >= image.length || sc < 0 || sc >= image[0].length){
            return;
        }

        if(cur != image[sr][sc]){
            return;
        }

        image[sr][sc] = color;

        fill(image, sr - 1, sc, color, cur);
        fill(image, sr + 1, sc, color, cur);
        fill(image, sr, sc - 1, color, cur);
        fill(image, sr, sc + 1, color, cur);
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글