๐ ๋ฌธ์
https://www.acmicpc.net/problem/1012
๋ฌธ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค. ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ ๊ฒ์ด๋ค.
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด ๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค. 0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 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)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฐฐ์ถ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
โ๏ธ ์ธ์ ํ ๊ทธ๋ฃน์ด ๋ช ๊ฐ ์๋์ง ํ์ธํ๋ BFS ๋ฌธ์
์ด๋ฐ ๋ฌธ์ ๋ค์ ๊ทธ๋์ ๊ฝค ์์ด์๋ค. ์ง๊ธ ๋น์ฅ ์๊ฐ๋๋ ๊ฒ๋ง ํด๋ ๋ฟ์๋ฟ์...?
โป๏ธ ์ ๋ ฅ: 2์ฐจ์ ๋ฐฐ์ด์ ๋ฐฐ์ถ๊ฐ ๋ค์ด์๋ ์์น๋ฅผ ํ์ํ๋ค.
โป๏ธ ๋ชจ๋ ์นธ์ ์กฐํํ๋ฉฐ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋์ง ์์ ๋ฐฐ์ถ๊ฐ ์๋์ง ํ์ธํ๋ค.
โป๏ธ ๋ฐฐ์ถ๊ฐ ์์ผ๋ฉด ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ์นด์ดํ ํ๊ณ ๊ทธ ์์น๋ถํฐ ์ฃผ๋ณ์ BFS๋ก ํ๋ฐฉํ๋ค. ์ธ์ ์นธ์ ๋ฐ๊ฒฌ๋๋ ์๋ก์ด ๋ฐฐ์ถ๊ฐ ์์ผ๋ฉด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๋ค. ์ด ๋ชจ๋ ๋ฃจํ๊ฐ ํ๋์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ์ฒ๋ฆฌํ ๊ตฌ์ญ์ด๋ค.
โป๏ธ ๋ชจ๋ ์นธ ์กฐํ๊ฐ ๋๋๋ฉด ์นด์ดํ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
//BFS
public class Main_๋ฐฑ์ค_1012_์ ๊ธฐ๋๋ฐฐ์ถ_์ค๋ฒ2 {
static int M, N;
static int[] dr = {1,-1,0,0};
static int[] dc = {0,0,1,-1};
static int[][] map;
static boolean[][] visited;
static Queue<int[]> queue = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int testCase = 1; testCase <= TC; testCase++) {
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());//๋ฐฐ์ถ๋ฐญ ๊ฐ๋ก๊ธธ์ด
N = Integer.parseInt(st.nextToken());//๋ฐฐ์ถ๋ฐญ ์ธ๋ก๊ธธ์ด
int K = Integer.parseInt(st.nextToken());//๋ฐฐ์ถ ์ฌ์ ์์น ๊ฐ์
map = new int[N][M];
visited = new boolean[N][M];
for (int k = 0; k < K; k++) {
st = new StringTokenizer(br.readLine());
int c = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
map[r][c]=1;
}//input
int result = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if(map[i][j]==1 && !visited[i][j]) {
result++; //๋ฐฐ์ถํฐ์ง๋ ์ด ์ถ๊ฐ
bfs(i,j);
}
}
}
sb.append(result).append("\n");
}//end of testCase
System.out.println(sb);//print
}//end of main
private static void bfs(int r, int c) {
queue.offer(new int[] {r,c});
visited[r][c]=true;
while(queue.size()>0) {
int[] cur = queue.poll();
int cr = cur[0];
int cc = cur[1];
for (int i = 0; i < 4; i++) {
int nr = cr+dr[i];
int nc = cc+dc[i];
if(nr<0||nc<0||nr>=N||nc>=M||
map[nr][nc]==0 || visited[nr][nc]) continue;
visited[nr][nc]=true;
queue.offer(new int[] {nr,nc});
}
}
}//end of bfs
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ