안선생의 개발 블로그
C++ 10026 적록색약 본문
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#include <iostream>
#include <vector>
#include<queue>
#include<algorithm>
using namespace std;
int g[102][102] = {};
int g2[102][102] = {};
bool visit[102][102] = {};
int n=1,m=1,k;
// 오 아 왼 위
int dx[4] = { 0,1,0,-1};
int dy[4] = { 1,0,-1,0};
bool red, blue, green, rg, blue2;
string s;
void dfs(int x, int y)
{
visit[x][y] = 1;
for (int i = 0; i < 4; i++)
{
int xx = x + dx[i];
int yy = y + dy[i];
if (xx < 0 || xx >= n || yy < 0 || yy >= n)
continue;
if (!visit[xx][yy] && red && !g[xx][yy])
{
dfs(xx, yy);
}
else if (!visit[xx][yy] && green && g[xx][yy]==1 )
{
dfs(xx, yy);
}
else if(!visit[xx][yy] && blue && g[xx][yy] == 2)
{
dfs(xx, yy);
}
else if (!visit[xx][yy] && rg && g[xx][yy] <2)
{
dfs(xx, yy);
}
else if (!visit[xx][yy] && blue2 && g[xx][yy] ==2)
{
dfs(xx, yy);
}
}
}
void reset()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
visit[i][j] = 0;
}
}
}
int main(void)
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
{
for (int j = 0; j < n; j++)
{
if (s[j] == 'R')
g[i][j] = 0;
else if (s[j] == 'G')
g[i][j] = 1;
else
g[i][j] = 2;
}
}
}
int result = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (!g[i][j] && !visit[i][j])
{
red = 1;
blue = green = 0;
dfs(i, j);
result++;
}
else if (g[i][j] ==1 && !visit[i][j])
{
green = 1;
blue = red = 0;
dfs(i, j);
result++;
}
else if(g[i][j] == 2 && !visit[i][j])
{
blue = 1;
green = red = 0;
dfs(i, j);
result++;
}
}
}
cout << result << " ";
reset();
red = blue = green = 0;
result = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (g[i][j] <2 && !visit[i][j])
{
rg = 1;
blue2 = 0;
dfs(i, j);
result++;
}
else if (g[i][j] == 2 && !visit[i][j])
{
blue2 = 1;
rg = 0;
dfs(i, j);
result++;
}
}
}
cout << result;
return 0;
}
|
cs |
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
'백준' 카테고리의 다른 글
C++ 7576 토마토 (0) | 2023.02.18 |
---|---|
C++ 7652 나이트의 이동 (0) | 2023.02.18 |
C++ 섬의 개수 (0) | 2023.02.17 |
C++ 1012 유기농 배추 (0) | 2023.02.16 |
C++ 2178 미로 탐색 (0) | 2023.02.16 |