Leetcode Java Flood Fill
업데이트:
문제
코드
class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int color) {
if (image[sr][sc] != color) {
this.dfs(image, sr, sc, image[sr][sc], color);
}
return image;
}
private void dfs(int[][] image, int sr, int sc, int color, int newColor) {
if (sr >= 0 && sr < image.length && sc >= 0 && sc < image[0].length && image[sr][sc] == color) {
image[sr][sc] = newColor;
this.dfs(image, sr + 1, sc, color, newColor);
this.dfs(image, sr - 1, sc, color, newColor);
this.dfs(image, sr, sc + 1, color, newColor);
this.dfs(image, sr, sc - 1, color, newColor);
}
}
}
결과
설명
-
image[sr][sc]에서 시작하여 4 방향의 색상이 동일한 경우, color를 넣어 수정된 image를 반환하는 문제이다.
- image[sr][sc]의 생상이 color와 동일하지 않은 경우만 3번에서 정의한 dfs(int[][] image, int sr, int sc, int color, int newColor) 메서드를 수행한다.
- 시작 지점의 색상인 image[sr][sc]가 color와 동일하면 예시에서 제공한대로 이미지를 변경하지 않는다.
- DFS 방식으로 color를 채워 넣을 dfs(int[][] image, int sr, int sc, int color, int newColor) 메서드를 정의한다.
- sr이 [0, image.length]를 만족하고, sc도 image[0].length를 만족하면서 image[sr][sc]의 색상이 동일한 경우, 상하좌우에 대한 재귀 호출을 수행한다.
- 반복이 완료되면 주어진 조건에 맞춘 color를 image에 채워넣어 수정된 image를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기