-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2630.cpp
53 lines (51 loc) · 1.13 KB
/
2630.cpp
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
// 2630. 색종이 만들기
// 2020.08.21
// 분할정복
#include<iostream>
using namespace std;
int b; // 파란색 색종이 개수
int w; // 하얀색 색종이 개수
int map[129][129];
void go(int n, int startX, int startY)
{
int color = map[startX][startY];
for (int i = startX; i < startX + n; i++)
{
for (int j = startY; j < startY + n; j++)
{
// 색깔과 다르다면 크기를 반으로 줄이고 다시 분할
if (map[i][j] != color)
{
go(n / 2, startX, startY);
go(n / 2, startX + n / 2, startY);
go(n / 2, startX, startY + n / 2);
go(n / 2, startX + n / 2, startY + n / 2);
return;
}
}
}
// 맨 처음 색에 따라 색종이 색깔 갯수 증가
if (color == 1)
{
b++;
}
else
{
w++;
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> map[i][j];
}
}
go(n, 0, 0);
cout << w << endl << b << endl;
return 0;
}