Hansel

프로그래머스_카카오 프렌즈 컬러링북(DFS) 본문

알고리즘과 자료구조/BFS&DFS

프로그래머스_카카오 프렌즈 컬러링북(DFS)

핑슬 2022. 5. 6. 23:10

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

 

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

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

어떤 영역을 만났을때 DFS로 그 영역을 전체 탐색하도록 하고 

다른 영역을 만났을때 그 영역이 방문한적이 없다면 탐색하도록 하면 된다.

 

프로그래머스 써보는건 처음인데 전역변수를 메서드 내부에서 초기화해주지 않으면 풀리지가 않는다

문제는 금방 풀었는데 전역변수 문제로 문제푸는 시간보다 더 많이 써먹었다;;

package TT5_MAY;

class Pgs_카카오컬러링북 {
    static boolean[][] visit;
    public static int[] solution(int m, int n, int[][] picture) {
        int[] answer = new int[2];
        big = 0;
        visit = new boolean[m][n];
        int result = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (picture[i][j] != 0 && visit[i][j]==false) {
                    visit[i][j] = true;
                    int dfs = dfs(i, j, n, m, 1, picture, picture[i][j]);
                    result++;
                    big = Math.max(dfs, big);
                } else{
                    continue;
                }
            }
        }

        answer[0] = result;
        answer[1] = big;
        return answer;
    }

    //4방향 탐색
    static int big = 0;
    static int[] xp = {1, -1, 0, 0};
    static int[] yp = {0, 0, 1, -1};

    private static int dfs(int y, int x, int n, int m, int level, int[][] pic, int num) {
        for (int i = 0; i < 4; i++) {
            int nx = xp[i] + x;
            int ny = yp[i] + y;
            if (nx >= 0 && ny >= 0 && nx < n && ny < m && !visit[ny][nx] && pic[ny][nx] == num) {
                visit[ny][nx] = true;
                level = dfs(ny, nx, n, m, level + 1, pic, num);
            }
        }
        return level;
    }
}

'알고리즘과 자료구조 > BFS&DFS' 카테고리의 다른 글

프로그래머스_소수찾기(DFS,소수)  (0) 2022.05.28
백준_10026(BFS)  (0) 2022.05.16
백준_2573(DFS & BFS)  (0) 2022.04.07
백준_15683(DFS)  (0) 2022.04.03
백준_16236(BFS)  (0) 2022.03.15