Search

Flood Fill

문제 설명 : 제공된 image 행렬에서 시작 포인트((sr, sc))부터 4방향에 존재하는 같은 색깔을 모두 제시된 컬러 값으로 변경한다.
풀이 방법
4방향의 좌표를 확인하여, 아래 조건이 모두 만족하면 추가 탐색하였다
현 위치와 동일한 컬러 값
새로운 좌표가 image 행렬 내 있을 때
아직 방문한적이 없는 좌표일 때
시간복잡도 : O(N)O(N)
성공 코드
물론 이와 같이, 주변 정보를 탐색하는 경우는 BFS로 하는게 더 적합할 수 있다.
하지만, 이와 같이 DFS로 한번 풀어보았다.
class Solution: def floodFill(self, image: List[List[int]], sr: int, sc: int, color: int) -> List[List[int]]: visit = set() self.color_change(image, color, sr, sc, visit) return image def color_change(self, image, color, x, y, visit): visit.add((x, y)) if 0 <= x - 1 < len(image) and image[x][y] == image[x - 1][y] and (x - 1, y) not in visit: self.color_change(image, color, x - 1, y, visit) if 0 <= x + 1 < len(image) and image[x][y] == image[x + 1][y] and (x + 1, y) not in visit: self.color_change(image, color, x + 1, y, visit) if 0 <= y - 1 < len(image[0]) and image[x][y] == image[x][y - 1] and (x, y - 1) not in visit: self.color_change(image, color, x, y - 1, visit) if 0 <= y + 1 < len(image[0]) and image[x][y] == image[x][y + 1] and (x, y + 1) not in visit: self.color_change(image, color, x, y + 1, visit) image[x][y] = color
Python
복사