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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| #include <vector>
using namespace std;
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int M;
int N;
vector<vector<int>> Pic;
int flood_fill(int m, int n,int col)
{
int sum = 0;
if (col == 0) { // 색상이 다르면 종료
return 0;
}
if (n > 0 && col == Pic[m][n - 1] ) // left, 색상이 같으면 재귀적으로 진행
{
Pic[m][n] = 0; // 해당 영역은 색상을 없애고
sum += flood_fill(m, n - 1, col); // 왼쪽으로 수행
}
if (n < N - 1 && col == Pic[m][n+1] ) // right
{
Pic[m][n] = 0;
sum += flood_fill(m, n + 1, col);
}
if (0 < m && col == Pic[m - 1][n]) //above
{
Pic[m][n] = 0;
sum += flood_fill(m - 1, n, col);
}
if (m < M - 1 && col == Pic[m+1][n]) // below
{
Pic[m][n] = 0;
sum += flood_fill(m + 1, n, col);
}
Pic[m][n] = 0;
return 1+sum;
}
vector<int> solution(int m, int n, vector<vector<int>> picture) {
int cnt_area, max_area, temp;
Pic.clear();
Pic = picture;
M = m;
N = n;
cnt_area = 0;
max_area = 0;
temp = 0;
vector<int> answer;
for (int i = 0; i<m; i++) {
for (int j = 0; j<n; j++)
{
max_area = flood_fill(i, j, Pic[i][j]); // 최대 크기값을 반환
if (max_area != 0) // 색상 영역이 존재하는 경우
{
cnt_area++; // 영역 카운트+
if (temp < max_area) // max값인지 확인
temp = max_area;
max_area=0;
}
}
}
answer.push_back(cnt_area);
answer.push_back(temp);
return answer;
}
|