https://www.acmicpc.net/problem/10026
- 쉬운 문제라 정리 안하려다가 타 블로그 해설을 보면 너무 어렵게 푸는 거 같아서 올려둠
- 모든 칸에서 dfs를 하면서 구간을 카운트하면 되고 적록색약인 케이스는 입력받은 맵을 수정해서(R -> G) 다시 dfs를 돌면 너무나도 쉽게 풀린다
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
int n, ans = 0;
string a[101];
bool check[101][101];
void dfs(int x, int y) {
check[x][y] = true;
for (int i = 0; i < 4; ++i) {
int nx = x + dx[i];
int ny = y + dy[i];
if (0 > nx || 0 > ny || nx >= n || ny >= n) continue;
if (a[x][y] != a[nx][ny] || check[nx][ny]) continue;
dfs(nx, ny);
}
}
void dfsLoop() {
memset(check, false, sizeof(check));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (!check[i][j]) {
dfs(i, j);
ans++;
}
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
dfsLoop();
cout << ans << ' ';
ans = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (a[i][j] == 'R') a[i][j] = 'G';
}
}
dfsLoop();
cout << ans;
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
boj 19237 - 어른 상어(구현) (0) | 2021.07.08 |
---|---|
boj 17140 - 이차원배열과 연산(구현, 정렬) (0) | 2021.07.08 |
[BOJ] 6087 - 레이저 통신(BFS) (0) | 2021.07.02 |
[boj]16236 - 아기상어(BFS, 우선순위 큐) (0) | 2021.07.02 |
[BOJ]16954 - 움직이는 미로 탈출(그래프 탐색 - bfs, dfs) (0) | 2021.06.29 |