프로그래머스-카카오프렌즈 컬러링북

이호영·2022년 4월 5일
0

프로그래머스-Level.2

목록 보기
10/36
import java.util.*;

class Solution {
    
    static int[][] dir={{0,1},{0,-1},{1,0},{-1,0}};
    static boolean[][] visit;
    
    public int[] solution(int m, int n, int[][] picture) {
        int numberOfArea = 0;
        int maxSizeOfOneArea = 0;
        visit=new boolean[m][n];
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(picture[i][j] !=0 && !visit[i][j]){
                    maxSizeOfOneArea=Math.max(maxSizeOfOneArea,bfs(m,n,i,j,picture));
                numberOfArea++;}
            }
        }
        return new int[]{numberOfArea, maxSizeOfOneArea};
    }
    
    public int bfs(int m, int n, int x, int y, int[][] picture){
        int range=1;
        Queue<Integer> q=new LinkedList<>();
        q.add(x);
        q.add(y);
        visit[x][y]=true;
        
        while(!q.isEmpty()){
             x=q.poll();
            y=q.poll();
            
            for(int k=0; k<4; k++){
                int nx=x+dir[k][0];
                int ny=y+dir[k][1];
                if(nx<0 || ny<0 || nx>=m || ny>=n) continue;
                if(visit[nx][ny]) continue;
                if(picture[x][y] !=picture[nx][ny]) continue;
                q.add(nx);
                q.add(ny);
                visit[nx][ny]=true;
                range++;
            }
        }
        return range;
    }
}

0개의 댓글