https://www.acmicpc.net/problem/27211
그림만 보면 허걱하는데 내용을 보면 전형적인 2차원 배열 내에서의 연결 요소 문제이다.
2차원 그리드 전체를 순회하면서 dfs 혹은 bfs 탐색으로 같은 구역으로 묶이는 지역들을 방문하면 된다.
다만 햇깔리는 점은 그리드 위아래, 왼쪽오른쪽이 서로 구 처럼 연결되어있으므로 그리드 범위를 넘어가면 반대지역으로 치환해주면 된다
#include <bits/stdc++.h>
using namespace std;
#define FASTIO cin.tie(nullptr)->sync_with_stdio(false)
int dr[] = {-1, 0, 1, 0};
int dc[] = {0, 1, 0, -1};
int n, m, a[1001][1001], d[1001][1001];
void dfs(int r, int c, int g) { //
d[r][c] = g;
for (int i = 0; i < 4; ++i) {
int nr = r + dr[i];
int nc = c + dc[i];
if (nr < 0) nr = n - 1;
if (nc < 0) nc = m - 1;
if (nr >= n) nr = 0;
if (nc >= m) nc = 0;
if (d[nr][nc] != -1 || a[nr][nc] == 1) continue;
dfs(nr, nc, g);
}
}
int main() {
FASTIO;
memset(d, -1, sizeof(d));
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> a[i][j];
}
}
int group = 0;
for (int i = 0; i < n; ++i) { // 세로
for (int j = 0; j < m; ++j) { // 가로
if (a[i][j] == 0 && d[i][j] == -1) dfs(i, j, ++group);
}
}
cout << group;
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
원티드 쇼미더코드 3회차 - C번 미팅 (0) | 2023.01.15 |
---|---|
원티드 쇼미더코드 2022년 3회차 - A번 신을 모시는 사당 (0) | 2023.01.15 |
BOJ 2228 - 구간 나누기(DP) - tabulation, memoization (0) | 2022.06.08 |
BOJ 11559 - Puyo Puyo(DFS, BFS, 배열 조작, 구현) C++, Java 풀이 (0) | 2022.03.23 |
BOJ 17825 - 주사위 윷놀이(구현, 브루트포스, 백트래킹) (0) | 2022.03.11 |