- toc {:toc}
๋ฌธ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค.๋์ฝ์ ์ฐ์ง ์๊ณ ย ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ย ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ย ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค. ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ ๊ฒ์ด๋ค.
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด ๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค. 0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ฒซ์งธ ์ค์๋ ๋ฐฐ์ถ๋ฅผ ์ฌ์ ๋ฐฐ์ถ๋ฐญ์ ๊ฐ๋ก๊ธธ์ด M(1 โค M โค 50)๊ณผ ์ธ๋ก๊ธธ์ด N(1 โค N โค 50), ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ์์น์ ๊ฐ์ K(1 โค K โค 2500)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ K์ค์๋ ๋ฐฐ์ถ์ ์์น X(0 โค X โค M-1), Y(0 โค Y โค N-1)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฐฐ์ถ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/1012
ํ์ด
๋ค ํ์๋๋ฐโฆ. boardํ์ ์ด๊ธฐํํด๋๊ณ visํ์ ์ด๊ธฐํ๋ฅผ ์๊ฐ๋ชปํ๋ค.
BFS ํ์ด ๊ทธ๋๋ก ํ์ดํ๋ฉด ๋๋ค. ๊ฒฐ๊ตญ ๋ณํํ๋ ๊ฒ์ ์กฐ๊ฑด์ ๋ฟ์ด๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์๋ง ์ฃผ์ํด์ ํ์ธํ๋ฉด ๋๋ค.
2022-07-31 ํ์ด
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int m, n, k;
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
while(T--){
int board[55][55] = {}; // ํ
์คํธ ์ผ์ด์ค๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
int vis[55][55] = {}; // ๊ผญ ์ด๊ธฐํ๋ฅผ ํด์ค์ผ ํจ.
cin >> m >> n >> k;
while(k--){ // ๋ฐฐ์ถ๊ฐ ์๋ ๊ณณ ํ์
int x, y;
cin >> x >> y;
board[y][x] = 1;
}
/*
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << board[i][j];
}
cout << endl;
}
*/
queue<pair<int, int>> q;
int ans = 0; // BFS ๋๋ฆฌ๊ธฐ
for(int row=0; row<n; row++){
for(int col=0; col<m; col++){
if(vis[row][col] == 0 && board[row][col] == 1){
vis[row][col] = 1;
q.push({row, col});
ans++;
}
while(!q.empty()){
auto cur = q.front(); q.pop();
for(int dir = 0; dir < 4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if(vis[nx][ny] != 0 || board[nx][ny] != 1) continue;
vis[nx][ny] = 1;
q.push({nx, ny});
}
}
}
}
cout << ans << endl;
}
}2023-09-06 ํ์ด
์๋กญ๊ฒ ๋ค์ ํ์ด๋ดค๋๋ฐ, ๋ก์ง์ ๋ณํ๋ ์๋ค.
1๋ก ์ด๋ฃจ์ด์ง ์์ญ์ด ๋ช ๊ฐ ์ธ์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ 1์ธ ๋ถ๋ถ์ ์ฒ์ ๋ค์ด๊ฐ ๋ ์์ญ ์ฒดํฌ๋ฅผ ํด์ฃผ๊ณ BFS๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ๋ ์์ญ์ -1๋ก ์์ ์ค๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋ถ ์ฐพ์ผ๋ฉด ๋ช ๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค.
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int T, M, N, K;
queue<pair<int, int>> q;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> T;
while(T--){
int board[55][55] = {0,};
cin >> M >> N >> K;
for(int i = 0; i < K; i++){
int x, y;
cin >> x >> y;
board[x][y] = 1;
}
int res = 0;
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++){
if(board[i][j] == 0 || board[i][j] == -1) continue;
q.push({i, j});
board[i][j] = -1;
res++;
while(!q.empty()){
auto cur = q.front(); q.pop();
for(int dir = 0; dir < 4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(nx < 0 || nx >= M || ny < 0 || ny >= N) continue;
if(board[nx][ny] == 0 || board[nx][ny] == -1) continue;
q.push({nx, ny});
board[nx][ny] = -1;
}
}
}
}
cout << res << '\n';
}
return 0;
}