[์ธํ๋ฐ/DFS/์ฌ๋๋ผ ์์ผ๋๋]
<<ํ์ด>>
import java.util.Scanner;
class Main {
static int answer = 0, n;
static int[] dx = {-1, -1, 0, 1, 1, 1, 0, -1};
static int[] dy = {0, 1, 1, 1, 0, -1 ,-1, -1};
public void DFS(int x, int y, int[][] board) {
for (int i = 0; i < 8; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && nx < n && ny >=0 && ny < n && board[nx][ny] == 1) {
board[nx][ny] = 0;
DFS(nx, ny, board);
}
}
}
public void solution(int[][] board) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(board[i][j] == 1) {
answer++;
board[i][j] = 0;
DFS(i, j, board);
}
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
int[][] arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = in.nextInt();
}
}
T.solution(arr);
System.out.println(answer);
}
}
์ด ๋ฌธ์ ๋ DFS ๋ฌธ์ ์ค์์๋ ์ฌ์ด ๋ฌธ์ ์ ์ํ๋ค.
์ด ๋ฌธ์ ์ ํต์ฌ์ DFS์ด๋ค.
์ธ๋ถ์ ์ฐธ์กฐํด์ ๋ค์ด์ค๋ ์๋ฅผ ๋ค์ด board ๊ฐ์ ๊ฒฝ์ฐ๋ ์ค์ board ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋๋ค. (์ฐธ์กฐํ๋ ๊ฑฐ๋ ๊ทธ๋๋ก์ด๋ค. ๋ณ์๋ง ์ฌ๋ฌ๊ฐ ์๊ธฐ๋ ๊ฒ์ด๋ค.)
๋๋ ๋ณต์ฌ ๋ณธ ๋ฐฐ์ด (๋ชจ๋ 0์ผ๋ก ๋)์ ๋ง๋ค์ด์ 1์ด ์์ผ๋ฉด 1๋ก ๋ณ๊ฒฝ์ ์ํค๊ณ , ๋ค์ ๊ณผ์ ์์ ๊ธฐ์กด ๋ฐฐ์ด์ 1์ธ๋ฐ ๋ณต์ฌ๋ณธ๋ 1์ด๋ฉด ๋์ด๊ฐ๊ณ ๊ธฐ์กด ๋ฐฐ์ด์ 1์ด๊ณ ๋ณต์ฌ๋ณธ์ 0์ด๋ฉด answer++ ํด์ ๋ต์ ๊ตฌํ๋ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ค.
ํ์ง๋ง ๊ฐ์ฌ๋์ ๊ธฐ์กด ๋ฐฐ์ด board ๊ฐ์ 0์ผ๋ก ๋ณ๊ฒฝ์ ์์ผ๊ฐ๋ฉฐ answer++ ํด์คฌ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๊ฐ์ฌ๋์ ํ์ด ๋ฐฉ์์ด ํจ์ฌ ๋ฆฌ์์ค ๋ฑ ์ฌ๋ฌ๋ถ๋ถ์์ ํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ค๋๋ ์ข์ ๊ฑธ ๋ฐฐ์ ๋ค.
์ค๋๋ง์ ํ์ด๋ณด๋ ๋๊ฐ ์ค๋๋ง์ ์๊ทน์ด ์จ๊ฒ ๋ง๋ฅ ใ
ใ
๊ฐ์ด ํ๋ค ใ
ใ
๊ทธ๋๋ ์ด๋ป๊ฒ ํ ์ง ๋ฐฉํฅ์ฑ ์ฝ๋ ์ง๋ ํ์์ ๊ธฐ์ต์ด ์ ๋๋ ๊ฒ ๊ฐ๋ค
๊พธ์คํ ๋งค์ฃผ 1-2๊ฐ์ฉ ํ์ด๋๊ฐ๋ฉด์ ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ดํด๋๋ฅผ ๋์ฑ ๊ฐํ ์์ผ๋๊ฐ์