Algorithm/Programmers
[Lv.2] 카카오프렌즈 컬러링북
시롱시롱
2023. 4. 11. 21:39
class Solution {
static boolean[][] areaFlag;
static int[][] pictureGrid;
static int height,width;
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
height=m;
width=n;
pictureGrid = picture.clone();
areaFlag=new boolean[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(!areaFlag[i][j]&&picture[i][j]!=0){
//검사되지 않은 영역을 대상으로 검사한다.
areaFlag[i][j] = true;
numberOfArea++;
int areaSize=1;
areaSize=dfs(i,j,areaSize);
maxSizeOfOneArea=Math.max(maxSizeOfOneArea,areaSize);
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
public int dfs(int i,int j,int areaSize){
if(i>0){
//상
if(!areaFlag[i-1][j]&&pictureGrid[i-1][j]==pictureGrid[i][j]){
//해당 좌표를 확인하지 않았고 해당 좌표의 색과 현재 검사하는 좌표의 색이 일치하는 경우 같은 영역이다.
areaFlag[i-1][j] =true;
areaSize++;
areaSize=dfs(i-1,j,areaSize);
}
}
if(i<height-1){
//하
if(!areaFlag[i+1][j]&&pictureGrid[i+1][j]==pictureGrid[i][j]){
//해당 좌표를 확인하지 않았고 해당 좌표의 색과 현재 검사하는 좌표의 색이 일치하는 경우 같은 영역이다.
areaFlag[i+1][j] =true;
areaSize++;
areaSize=dfs(i+1,j,areaSize);
}
}
if(j>0){
//좌
if(!areaFlag[i][j-1]&&pictureGrid[i][j-1]==pictureGrid[i][j]){
//해당 좌표를 확인하지 않았고 해당 좌표의 색과 현재 검사하는 좌표의 색이 일치하는 경우 같은 영역이다.
areaFlag[i][j-1] =true;
areaSize++;
areaSize=dfs(i,j-1,areaSize);
}
}
if(j<width-1){
//우
if(!areaFlag[i][j+1]&&pictureGrid[i][j+1]==pictureGrid[i][j]){
//해당 좌표를 확인하지 않았고 해당 좌표의 색과 현재 검사하는 좌표의 색이 일치하는 경우 같은 영역이다.
areaFlag[i][j+1] =true;
areaSize++;
areaSize=dfs(i,j+1,areaSize);
}
}
return areaSize;
}
}
간단한 dfs문제였다. bfs로도 풀 수 있을 것 같긴 하다.