public class KakaoFriendsColoringBook {
private static boolean[][] visit;
private static int[] dx = new int[] { 0, 0, -1, 1 };
private static int[] dy = new int[] { 1, -1, 0, 0 };
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0, maxSizeOfOneArea = 0;
visit = new boolean[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!visit[i][j] && picture[i][j] != 0) {
numberOfArea++;
maxSizeOfOneArea = Math.max(maxSizeOfOneArea, dfs(picture, i, j, picture[i][j]));
}
}
}
return new int[] { numberOfArea, maxSizeOfOneArea };
}
private static int dfs(int[][] picture, int x, int y, int current) {
int cnt = 1;
if (visit[x][y])
return 0;
for (int i = 0; i < 4; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
if (newX >= 0 & newX < picture.length && newY >= 0 && newY < picture[0].length
&& current == picture[newX][newY]) {
visit[x][y] = true;
cnt += dfs(picture, newX, newY, current);
}
}
return cnt;
}
}
- Flood Fill 알고리즘 - 영역 등을 구하는 알고리즘