본문 바로가기

Programmers/Level2

카카오프렌즈 컬러링북

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution {
 
    public int search(int[][] pic, int i, int j, int value) {
        // 범위를 초과했을 경우
        if (i < 0 || j < 0 || i >= pic.length || j >= pic[0].length)
            return 0;
        if (pic[i][j] == 0// 탐색할 필요가 없는 경우 
            return 0;
        else if (pic[i][j] != value) { // 영역이 달라졌을 경우
            return 0;
        } else {
            pic[i][j] = 0// 탐색한 부분을 0으로 처리
            // 상하좌우 탐색
            return 1 + search(pic, i + 1, j, value) + search(pic, i - 1, j, value) + search(pic, i, j + 1, value)
                    + search(pic, i, j - 1, value);
        }
    }
    public int[] solution(int m, int n, int[][] picture) {
        int numberOfArea = 0;
        int maxSizeOfOneArea = 0;
        int[] answer = new int[2];
        int[][] pic = new int[m][n];
        for (int i = 0; i < m; i++) { // picture 복사
            for (int k = 0; k < n; k++) {
                pic[i][k] = picture[i][k];
            }
        }
        
        // 전체 탐색
        for (int i = 0; i < pic.length; i++) {
            for (int j = 0; j < pic[0].length; j++) {
                int value = pic[i][j];
                int area = search(pic, i, j, value);
                if (area != 0) {
                    numberOfArea++;
                    if (maxSizeOfOneArea < area)
                        maxSizeOfOneArea = area;
                }
            }
        }
        answer[0= numberOfArea;
        answer[1= maxSizeOfOneArea;
        return answer;
    }
}
cs

특정한 값으로 인접된 영역을 구하는 문제이다.

상하좌우 탐색을 재귀 함수(DFS)로 구현하였다.

picture 배열을 직접 사용하면 오류가 나서 pic으로 복사한 후 사용하였다.

'Programmers > Level2' 카테고리의 다른 글

더 맵게  (0) 2021.07.12
타겟 넘버  (0) 2021.07.12
문자열 압축  (0) 2021.07.10
[1차] 뉴스 클러스터링  (0) 2021.07.09
기능개발  (0) 2021.07.09