본문 바로가기
Algorithm/프로그래머스풀이

[알고리즘 문제풀이] 프로그래머스 - 카카오 프렌즈 컬러링북 / JAVA(자바)

by 계범 2022. 3. 3.

https://programmers.co.kr/learn/courses/30/lessons/1829

 

코딩테스트 연습 - 카카오프렌즈 컬러링북

6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5]

programmers.co.kr

/**
    1. bfs로 영역의 개수와 가장 큰 영역의 칸 수 반환
**/

import java.util.*;

class Solution {
    public int[] solution(int m, int n, int[][] picture) {
        int[] answer = new int[2];
        
        answer = bfs(m,n,picture);
        return answer;
    }
    
    public int[] bfs(int m, int n, int[][] picture){
        int cnt = 0;
        int max = 0;
        Queue<int[]> q = new LinkedList<>();
        int[] dirX = {0,0,1,-1};
        int[] dirY = {1,-1,0,0};
        
        boolean[][] visited = new boolean[m][n]; 
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(visited[i][j] == false && picture[i][j] != 0){
                    cnt++;
                    int size = 1;
                    visited[i][j] = true;
                    q.offer(new int[] {i,j,1});
                    
                    while(!q.isEmpty()){
                        
                        int[] cur = q.poll();
                        
                        int x = cur[0];
                        int y = cur[1];
                        
                        for(int idx = 0; idx < 4; idx++){
                            int nx = x + dirX[idx];
                            int ny = y + dirY[idx];
                            
                            if(nx < 0 || nx >= m || ny <0 || ny >= n) continue;
                            if(visited[nx][ny] == true) continue;
                            if(picture[nx][ny] != picture[x][y]) continue;
                            visited[nx][ny] = true;
                            size++;
                            q.offer(new int[] {nx,ny});
                        }
                    }
                    max = Math.max(max,size);
                }
            }
        }
        return new int[]{cnt,max};
    }
}

댓글