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

HoJeong Im·2021년 10월 6일
0

Break_Algo

목록 보기
36/46

문제

코드

import java.util.*;
/*
 1 1 1 0
 1 2 2 0 
 1 0 0 1
 0 0 0 1
 0 0 0 3
 0 0 0 3
*/
class Solution {
    int[] dr = new int[]{-1,1,0,0};
    int[] dc = new int[]{0,0,-1,1};
    int max = -1;
    private int bfs(int x,int y, int[][] visited, int[][] picture){
        Queue<int[]> queue = new LinkedList();
        queue.offer(new int[]{x,y});
        int result = 0;
        int val = picture[x][y];
        visited[x][y] = 1;
        while(!queue.isEmpty()){
            int[] target = queue.poll();
            if(picture[target[0]][target[1]] == val){
                //System.out.println(target[0]+","+target[1]);
                result++;
            }
            for(int i = 0; i < 4; i++){
                int nr = target[0]+dr[i];
                int nc = target[1]+dc[i];
                
                if(nr >= 0 && nr < visited.length 
                  && nc >=0 && nc < visited[0].length) {
                    if(visited[nr][nc]==0 && picture[nr][nc] == val){
                        visited[nr][nc] = 1; 
                        queue.offer(new int[]{nr,nc});
                    }
                }
            }
            
        }
        if(max < result){
            max = result;
        }
        return result;
    }
    
    public int[] solution(int m, int n, int[][] picture) {
        int[][] visited = new int[m][n];

        int val = 0;
        
        for(int i = 0; i < m ; i++){
            for(int j = 0 ; j < n; j++){
                if(visited[i][j]==0 && picture[i][j] != 0){
                    val++;
                    bfs(i,j,visited, picture);
                }
            }
        }    
        int[] answer = new int[2];
        answer[0] = val;
        answer[1] = max;
        return answer;
        
    }
}

회고

  • 평소에 자바스크립트를 통해 코딩테스트를 주로 진행하다가 자바를 보는 기업이 있어서 연습하게 됨

  • 코드 오류를 바로 알려주어서 편하게 사용할 수 있는듯

  • 하지만, 더욱 익숙해 져서 알고리즘 문제도 잘 풀 수 있도록 노력하자

profile
꾸준함이 제일 빠른 길이었다

0개의 댓글