백준
백준 소스코드 [C++] 10026 적록색약
Hani_Levenshtein
2020. 8. 17. 07:15
https://www.acmicpc.net/problem/10026
10026번: 적록색약
문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(
www.acmicpc.net
백준 소스코드 [C++] 10026 적록색약
#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
char arr[102][102];
bool check[102][102];
pair<int, int>direction[4] = { {-1,0},{1,0},{0,1} ,{0,-1} };
void dfs(int i, int j) {
bool res = false;
for (int a = 0;a < 4;a++)
if (arr[i + direction[a].first][j + direction[a].second] == arr[i][j] &&
check[i + direction[a].first][j + direction[a].second] == false) {
res = true;
check[i + direction[a].first][j + direction[a].second] = true;
dfs(i + direction[a].first, j + direction[a].second);
}
if (res == false) return;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int RGB = 0,RB=0;
for (int i = 0;i < n;i++)for (int j = 0;j < n;j++) cin >> arr[i][j];
for (int i = 0;i < n;i++)for (int j = 0;j < n;j++) {
if (check[i][j] == false && arr[i][j]) {
dfs(i, j);
RGB++;
}
}
for (int i = 0;i < n;i++)for (int j = 0;j < n;j++) {
check[i][j] = false;
if (arr[i][j] == 'G')arr[i][j] = 'R';
}
for (int i = 0;i < n;i++)for (int j = 0;j < n;j++) {
if (check[i][j] == false && arr[i][j]) {
dfs(i, j);
RB++;
}
}
cout << RGB << " " << RB;
return 0;
}