๋ฌธ์
๋ฌธ์ ๋งํฌ 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)๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ ๋ฐฐ์ถ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
- ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ด๋์ด
- boolean ๋ฐฐ์ด์ M๊ณผ Nํฌ๊ธฐ๋ก ์์ฑํ๋ค.
- ์ ๋ ฅ์ ๋ฐ์ ์ขํ๋ฅผ true๋ก ๋ฐ๊พผ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด์ค for๋ฌธ์ ๋๋ฉด์ ํด๋น ์ขํ๊ฐ true์ผ ๊ฒฝ์ฐ, BFS๋ฅผ ๋๋ฆฐ๋ค.
- BFS๋ฅผ ๋๋ฆด๋, Point๋ฅผ ์จ์ x๊ฐ๊ณผ y๊ฐ์ Queue์ ์ ์ฅํ๋ค.
- ๊ทธ๋ฆฌ๊ณ while๋ฌธ์ ๋๋ฆฌ๋๋ฐ Queue๊ฐ ๋น๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋ณ์๋ค์ .peek().x์ .peek().y๋ฅผ ์ฌ์ฉํ์ฌ Queue์ ๋ฃ์๋ x์ y๊ฐ์ ์ ์ฅํ๋ค.
- ๊ทธ๋ฆฌ๊ณ for๋ฌธ์ 4๋ฒ ๋ฐ๋ณตํ๋ฉด์ ์์ ์ ์ธํด์ฃผ์๋ ์ํ์ข์ฐ ์ขํ๋ฅผ ๊ธฐ์กด ์ขํ๊ฐ์ ๋ํ ๊ฐ์ ๊ณ์ ์๋ก์ด ๋ณ์์ ์ ์ธํด์ค๋ค.
- ์๋ก์ด ๋ณ์์ ์ ์ฅ๋ ์ขํ๊ฐ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด continueํ๊ณ , ๋ฒ์์์ด๋ผ๋ฉด ๋ฐฐ์ด๊ฐ์ด true์ธ์ง ํ์ธํ ๋ค, ์ด๋ํ ์ขํ๊ฐ์ false๋ก ๋ฐ๊ฟ์ฃผ๊ณ ํด๋น ์ขํ๋ฅผ Queue์ ๋ฃ์ด์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ BFS๊ฐ ๋๋๋ง๋ค ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ๋ง๋ฆฌ์ฉ ๋ ํ์ํ๋ค๋ ๋ป์ด๋ฏ๋ก BFS๋๋๋ง๋ค ์นด์ดํธ๋ฅผ + 1ํ๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- X
์ฝ๋
import java.awt.*;
import java.io.*;
import java.util.*;
public class BOJ1012 {
static boolean field[][];
static int dx[] = {-1, 1, 0, 0};
static int dy[] = {0, 0, -1, 1};
static int M;
static int N;
static int cnt;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// ํ
์คํธ์ผ์ด์ค ๊ฐ์
int T = Integer.parseInt(br.readLine());
for(int test = 0; test < T; test++){
StringTokenizer st = new StringTokenizer(br.readLine());
// ๋ฐฐ์ถ๋ฐญ ๊ฐ๋ก ๊ธธ์ด
M = Integer.parseInt(st.nextToken());
// ๋ฐฐ์ถ๋ฐญ ์ธ๋ก ๊ธธ์ด
N = Integer.parseInt(st.nextToken());
// ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ์์น์ ๊ฐ์
int K = Integer.parseInt(st.nextToken());
field = new boolean[N][M];
// ์ง๋ ์ด ๊ฐ์ ์นด์ดํธํ ๋ณ์
cnt = 0;
for(int i = 0; i < K; i++){
StringTokenizer st2 = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st2.nextToken());
int n = Integer.parseInt(st2.nextToken());
// ์
๋ ฅ๋ฐ์ ์์น ๊ฐ์ true๋ก ๋ณํ (๋ฐฐ์ถ๊ฐ ์์ผ๋ฏ๋ก)
field[n][m] = true;
}
// ์ขํ๊ฐ์ ๋๋ ค๊ฐ๋ฉฐ ํด๋น ์ขํ์ ๋ฐฐ์ถ๊ฐ ์์ผ๋ฉด
// BFS๋ฅผ ๋๋ฆผ
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
if(field[i][j]){
BFS(i, j);
// BFS๋ฅผ ๋๋ฆฐ ํ์๊ฐ ์ง๋ ์ด ๊ฐ์์ด๋ฏ๋ก ์นด์ดํธ + 1
cnt = cnt + 1;
}
}
}
sb.append(cnt + "\n");
}
System.out.println(sb);
}
static public void BFS(int i, int j){
Queue<Point> q = new LinkedList<>();
// Queue ๊ฐ์ x,y๊ฐ์ ๋ฃ์ด์ค
q.offer(new Point(i, j));
while(!q.isEmpty()){
// x, y๊ฐ์ ๋ณ์์ ์ ์ฅ
int nx = q.peek().x;
int ny = q.peek().y;
q.poll();
for(int d = 0; d < 4; d++){
int mx = nx + dx[d];
int my = ny + dy[d];
// ๋ง์ฝ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด์ค ๊ฒฝ์ฐ, continue
if(mx >= N || mx < 0 || my >= M || my < 0){
continue;
}
// ๋ง์ฝ ์ด๋ํ ์ง์ญ์ ๋ฐฐ์ถ๊ฐ ์๋ค๋ฉด
if(field[mx][my]){
// ๊ทธ ์ง์ญ ๊ฐ์ false๋ก ๋ฐ๊ฟ์ฃผ๊ณ
field[mx][my] = false;
// ๊ทธ ์ขํ๊ฐ์ Queue์ ๋ฃ์ด์ค
q.offer(new Point(mx, my));
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 1927 ์ต์ ํ (0) | 2024.08.01 |
---|---|
[Java] BOJ 1260 DFS์ BFS (0) | 2024.08.01 |
[Java] BOJ 7626 Four Squares (2) | 2024.07.31 |
[Java] BOJ 11727 2รn ํ์ผ๋ง 2 (0) | 2024.07.30 |
[Java] BOJ 11726 2รn ํ์ผ๋ง (0) | 2024.07.29 |