문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
주어진 이미지는 m x n 크기의 정수 격자로 표현되며, image[i][j]는 이미지의 픽셀 값을 나타낸다. 또한 세 개의 정수 sr, sc, color가 주어진다. 목표는 image[sr][sc] 픽셀부터 시작하여 이미지 전체에 플러드 필을 수행하는 것이다.
플러드 필 수행하는 것
플러드 필 수행 이후 수정된 이미지를 반환해라.
#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으로 칠해져 있다. 따라서 이미지에는 아무런 변경사항이 적용되지 않는다.
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);
}
}