- 입력으로 하나의 Binary 이미지를 받는다.
- 각 픽셀은 background pixel 이거나 혹은 image pixel
- 서로 연결된 image pixel들의 집합을 blob이라고 부름
- 상하좌우 및 대각방향으로도 연결된 것으로 간주

입력 : n*n 크기의 2차원 그리드 , 하나의 좌표(x,y)
출력 : 픽셀 (x,y)가 포함된 blob의 크기, (x,y)가 어떤 blob에도 속하지 않는 경우는 0
Recursive Thinking
현재 픽셀이 이 속한 blob의 크기를 카운트 하려면
현재 픽셀이 image color가 아니라면
0을반환
현재 픽셀이 image color 라면
먼저 현재 픽셀을 카운트한다.
현재 픽셀이 중복 체크되는 것을 방지하기 위해 다른 색으로 칠한다.
현재 픽셀에 이웃한 모든 픽셀들에 대해서
그 픽셀이 속한 blob의 크기를 카운트하여 카운터에 더해준다.
카운터를 반환한다.
private static void dfs(int x,int y) {
if(x < 0 || x >= n || y < 0 || y >= n) {
return;
}
visited[x][y] = true;
count++;
for(int i=0; i<8; i++) {
int nx = x+dx[i];
int ny = y+dy[i];
if(nx < 0 || nx >= n || ny < 0 || ny >= n)
continue;
if(arr[nx][ny]==1&&!visited[nx][ny]) {
dfs(nx,ny);
}
}
}
직접 짜본 코드이다. 강의 보다 더 보기쉽게 구현하였다.
'알고리즘 with 자바 > 알고리즘' 카테고리의 다른 글
| 멱집합 (0) | 2021.09.13 |
|---|---|
| Recursion의 응용 : n queen problem (0) | 2021.09.09 |
| Recursion의 개념과 기본 예제들 3 (0) | 2021.09.08 |
| Recursion의 개념과 기본 예제들 2 (0) | 2021.09.08 |
| Recursion의 개념과 기본 예제들 1 (0) | 2021.09.08 |