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

SeongWon Oh·2021년 11월 2일
0
post-thumbnail

🔗 문제 링크

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


👨🏻‍💻 작성한 코드

class Solution {
    static int[] dx = {-1, 1, 0, 0}, dy = {0, 0, -1, 1};
    static boolean[][] check;
    static int oneSize;
    
    public int[] solution(int m, int n, int[][] picture) {
        int numberOfArea = 0;
        int maxSizeOfOneArea = 0;
        check = new boolean[m][n];

        for (int i=0; i<m; i++) {
            for (int j=0; j<n; j++) {
                if (!check[i][j] && picture[i][j] != 0) {
                    oneSize = 0;
                    dfs(i, j, m, n, picture);
                    numberOfArea++;
                    
                    if (oneSize > maxSizeOfOneArea) maxSizeOfOneArea = oneSize;
                }
            }
        }
        
        
        int[] answer = new int[2];
        answer[0] = numberOfArea;
        answer[1] = maxSizeOfOneArea;
        return answer;
    }
    
    
    static void dfs(int r, int c, int m, int n, int[][] picture) {
        check[r][c] = true;
        oneSize++;
        for (int i=0; i<4; i++) {
            int nc = c + dx[i];
            int nr = r + dy[i];
            
            if (0 > nr || nr >= m || 0 > nc || nc >= n || check[nr][nc]) continue;
            
            if (picture[r][c] == picture[nr][nc])
                dfs(nr, nc, m, n, picture);
        }   
    }
    

}


📝 결론

불과 한달 전까지만해도 그래프 관련 문제를 풀어본 적이 없어서 오늘 풀어본 프로그래머스의 '카카오프렌즈 컬러링북' 문제도 풀지 못하였었다.

한달 동안 여러 백준의 문제들을 풀며 그래프를 비롯한 여러 알고리즘 문제를 풀며 알고리즘 풀이 실력을 키우고 오랜만에 프로그래머스 문제를 풀어보니 새로운 느낌이 들었다.

DFS, BFS로 풀 수 있는 기본 문제인데 어째서 한달 전에는 손도 대지 못했을까..?하는 생각이 들며 앞으로도 꾸준히 문제를 풀며 알고리즘 문제풀이 실력을 키워야겠다는 생각이 들었다.

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글