Hansel
프로그래머스_카카오 프렌즈 컬러링북(DFS) 본문
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 |