[알고리즘] 카카오 프렌즈 컬러링북

Noah_·2021년 12월 13일
0

알고리즘

목록 보기
1/1
post-thumbnail
post-custom-banner

문제 설명

문제 풀이 - 해결방법

  • BFS를 활용하여 문제를 해결한다.
  • 자료구조 Queue를 사용한다.

문제 풀이 - 코드

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    static int[] dx = {1, -1, 0, 0};
    static int[] dy = {0, 0, 1, -1};
    
    static class Node{
        int x;
        int y;
        
        public Node(int x, int y){
            this.x = x; 
            this.y = y;
        }
    }
    
    static Queue<Node> queue = new LinkedList<Node>();
    static boolean[][] isVisited;
    static int size = 0;
    
    public int[] solution(int m, int n, int[][] picture) {
        int numberOfArea = 0;
        int maxSizeOfOneArea = 0;

        isVisited = new boolean[m][n];
        
        for(int row = 0; row < m; row++){
            for(int col = 0; col < n; col++){
                if(picture[row][col] != 0 && isVisited[row][col] != true){
                    size = 1;
                    bfs(picture, row, col, m, n);
                    numberOfArea++;

                    if(maxSizeOfOneArea < size){
                        maxSizeOfOneArea = size;
                    }
                }
            }
        }
        
        int[] answer = new int[2];
        answer[0] = numberOfArea;
        answer[1] = maxSizeOfOneArea;
        return answer;
    }
    
    static void bfs(int[][] picture, int x, int y, int m, int n)
    {
        queue.add(new Node(x, y));
        isVisited[x][y] = true;
        
        while(!queue.isEmpty()){
            Node curr = queue.poll();
            
            for(int dir = 0; dir < 4; dir++){
                int nx = curr.x + dx[dir];
                int ny = curr.y + dy[dir];
                
                if(0 <= nx && nx < m && 0 <= ny && ny < n){
                    if(picture[nx][ny] == picture[x][y] && isVisited[nx][ny] != true){
                        queue.add(new Node(nx, ny));
                        isVisited[nx][ny] = true;
                        size++;
                    }
                }
            }
        }
    }
}
profile
경제적 자유를 꿈꾸는 개발자
post-custom-banner

0개의 댓글