๐งจ ๋ฐฑ์ค 1012๋ฒ - ์ ๊ธฐ๋ ๋ฐฐ์ถ
๋ฌธ์ ๋์ด๋ : ์ค๋ฒ2
๋ฌธ์ ๋งํฌ : www.acmicpc.net/problem/1012
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์
www.acmicpc.net
๐งจ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๋ฐ C++ ์ฝ๋
2178๋ฒ ๋ฏธ๋กํ์ ๋ฌธ์ ์ ๋น์ทํ๊ฒ 2์ฐจ์ ์ขํ๋ฅผ ์ด์ฉํด ์์น ์ด๋์ ํด์ผํ๋ฏ๋ก ์ํ์ข์ฐ dx, dy ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค. ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ DFS๋ ๋ญ๊ฐ ๊ฑฐ๋ถ๊ฐ์ด ์์ด์ ์ผ๋จ BFS๋ก ๊ตฌํํ๋ค. (DFS๋ก ์ง๋ ์๊ด์๋ ๊ฑฐ ๊ฐ๋ค) ์ฒ์์ ๋์ฒด ์ด๋์ ๋ฐฐ์ถ๊ฐ ์๋์ง ์์์ผ ์ง๋ ์ด๋ฅผ ๋๋ ๋ง๋ ํ ๊ฑฐ ์๋๊ฐ ์ถ์ด์ ์ด๋ฅผ ํ์ํด์ฃผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊น ํ๋๋ฐ, ๋ด๊ฐ ์ํ๋๋๋ก ๊ตฌํ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ด์ฉ ์ ์์ด N * M ํฌ๊ธฐ์ ๋ฐญ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์์ด์.. ๊ทธ๋ ๊ฒ ํ๋๋ฐ ์๊ฐ์ด๊ณผ ์ ๋ ๊ฑธ ๋ณด๋ ์ด๊ฒ ๋ง๋ ๊ฑฐ ๊ฐ๋ค ?
๊ทธ๋ฆฌ๊ณ BFS๋ฅผ ์ฐ๊ธด ํ์ง๋ง ํ์ ๋ค์ด๊ฐ์๋์ง๋ฅผ ์ฒดํฌํ๋๊ฑฐ๋ isMarked ๋ญ ๊ทธ๋ฐ๊ฒ ํ์๊ฐ ์์๋ค. ๊ทผ๋ฐ๋ ๋์๊ฐ๋ค. ์์ด๋ ๋๋ ๊ตฌ์กฐ์ด๊ธด ํ๋ฐ ์ฐธ ์ ๋งคํ๋ค. ๋ค๋ฅธ ์น๊ตฌ๋ค ์ฝ๋๋ฅผ ๋ด์ผ๊ฒ ๋ค..
#include <iostream>
#include <queue>
using namespace std;
int T, M, N, K;
int dx[] = { -1, 1, 0, 0 }; // ์ข, ์ฐ, ์, ํ
int dy[] = { 0, 0, -1, 1 };
void BFS(int G[50][50], int y, int x) {
queue<pair<int, int>> q;
q.push(make_pair(y, x));
while (!q.empty()) {
int cur_x = q.front().first;
int cur_y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int nx = cur_x + dx[i];
int ny = cur_y + dy[i];
if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
if (G[nx][ny] == 0) continue;
if (G[nx][ny] == 1) {
G[nx][ny] = 0;
q.push(make_pair(nx, ny));
}
}
}
}
int main(void) {
cin >> T;
for (int t = 0; t < T; t++) {
cin >> M >> N >> K;
int G[50][50] = { 0 };
for (int i = 0; i < K; i++) {
int m, n;
cin >> m >> n;
G[n][m] = 1;
}
int count = 0;
for (int x = 0; x < M; x++) {
for (int y = 0; y < N; y++) {
if (G[y][x] == 0) continue;
else {
BFS(G, y, x);
count++;
}
}
}
cout << count << '\n';
}
return 0;
}
'Problem Solving > BOJ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 1707๋ฒ ์ด๋ถ๊ทธ๋ํ (C++ ์ฝ๋) (0) | 2021.01.24 |
---|---|
[BOJ] ๋ฐฑ์ค 10026๋ฒ ์ ๋ก์์ฝ (C++ ์ฝ๋) (0) | 2021.01.23 |
[BOJ] ๋ฐฑ์ค 2178๋ฒ ๋ฏธ๋กํ์ (C++ ์ฝ๋) (0) | 2021.01.22 |
[BOJ] ๋ฐฑ์ค 2644๋ฒ ์ด์๊ณ์ฐ (C++ ์ฝ๋) (0) | 2021.01.22 |
[BOJ] ์ ์ถ๋ ฅ๋ฌธ์ - getline, cin, %1d (0) | 2021.01.13 |