728x90
반응형
Java
import java.util.*;
class Solution {
public int[] solution(int m, int n, int[][] picture) {
int[][] pictureCopy = Arrays.stream(picture).map(int[]::clone).toArray(int[][]::new);//picture복사
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
for(int x = 0; x < m; x++){
for(int y = 0; y < n; y++){
if (pictureCopy[x][y] > 0){
numberOfArea++;
int count = Count(pictureCopy, x, y, pictureCopy[x][y]);//이어진 개수 리턴
if(count > maxSizeOfOneArea)
maxSizeOfOneArea = count;
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
private int Count(int[][] pictureCopy, int x, int y, int number){
if(x < 0 || y < 0 ||
x >= pictureCopy.length || y >= pictureCopy[x].length ||//x, y가 인덱스 범위 벗어나거나
pictureCopy[x][y] == 0 || pictureCopy[x][y] != number)// 이미 다녀간 경로 혹은 빈 공간, 또는 같은 색이 아니면
return 0;
pictureCopy[x][y] = 0;
return Count(pictureCopy, x - 1, y, number) + Count(pictureCopy, x + 1, y, number) +
Count(pictureCopy, x, y - 1, number) + Count(pictureCopy, x, y + 1, number) + 1;//상하좌우 다 검사
}
}
728x90
반응형