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