IT/CodingTeest

[프로그래머스]카카오프렌즈컬러링북 java

haemni 2022. 3. 1. 12:53
728x90
반응형
SMALL

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

import java.util.*;
import java.math.*;

class Solution {
 static class Node{
    int x; 
    int y;

    public Node(int x, int y) {
        this.x= x;
        this.y=y;
    }
 }
    int dx [] = {-1,0,1,0};
    int dy [] = {0,1,0,-1};
    boolean visited [][]= {};

    public int[] solution(int m, int n, int[][] picture) {
        int numberOfArea = 0;
        int maxSizeOfOneArea = 0;
        visited = new boolean [m][n];

        for(int i = 0 ; i<m; i++) {
            for(int j = 0 ; j<n ; j++) {
                if(visited[i][j] != true && picture[i][j] != 0) {
                  numberOfArea++;
                 maxSizeOfOneArea = Math.max(maxSizeOfOneArea,bfs(m,n,picture,i,j));
                }

            }

        }

        /* dfs 스택,재귀  bfs 큐arraylist
        1 1 1 0
        1 2 2 0
        1 0 0 1
        0 0 0 1
        0 0 0 3
        0 0 0 3
        */ 
        int[] answer = new int[2];
        answer[0] = numberOfArea;
        answer[1] = maxSizeOfOneArea;
        return answer;
    }

    public int bfs (int m, int n, int[][]picture, int x,int y){
        Queue <Node > q = new LinkedList<Node>();
        q.add(new Node(x,y));
        visited[x][y] = true;
        int nx = 0;
        int ny = 0;
        int size = 1;

     while(! q.isEmpty()) {
        Node now = q.poll();
        for(int i = 0 ; i<4; i++) {
          nx = now.x + dx[i];
          ny = now.y + dy[i];
          if(nx >=0 && nx < m && ny >= 0 && ny< n) {
              if(picture[nx][ny] == picture[x][y] && visited[nx][ny] == false) {

                  visited[nx][ny] = true;
                  size++;
                  q.add(new Node(nx,ny));
              }
          } 

        }
    }   

        return size;

    }

}
반응형
LIST