재귀를 이용하여 구현하였다.
public class Main {
//이차원 배열로 이미지 표현
static int arr[][] ={
{1,0,0,0,0,0,0,1},
{0,1,1,0,0,1,0,0},
{1,1,0,0,1,0,1,0},
{0,0,0,0,0,1,0,0},
{0,1,0,1,0,1,0,0},
{0,1,0,1,0,1,0,0},
{1,0,0,0,1,0,0,1},
{0,1,1,0,0,1,1,1}};
//상수로 컬러 표현
public static final int BackgroundColor = 0;
public static final int ImageColor = 1;
public static final int AlreadyCounted = 2;
public static void main(String[] args){
System.out.println(countBlob(7,7));
}
//재귀적으로 구현
static int countBlob(int x, int y) {
if(x<0 || y<0 || x>7 || y>7)
return 0;
if(arr[x][y]==BackgroundColor || arr[x][y]==AlreadyCounted)
return 0;
int count = 1;
arr[x][y] = AlreadyCounted;
for(int i=x-1; i<=x+1; i++)
for(int j=y-1; j<=y+1; j++) {
if(i==x&&y==j) continue;
count+=countBlob(i, j);
}
return count;
}
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
유클리드 호제법 (1) | 2024.10.12 |
---|---|
비트마스크 알고리즘/ 집합 구현 (0) | 2024.01.28 |
동적계획법/다이나믹 프로그래밍(Dynamic Programming) (0) | 2022.11.09 |
순열과 조합 (0) | 2022.10.12 |
멱집합(PowerSet) (0) | 2022.10.12 |