BOJ_S1_2468
๐ [S1_2468] ์์ ์์ญ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
static StringTokenizer st;
static int N, res;
static int[][] arr;
static int[] dx = { 1, -1, 0, 0 };
static int[] dy = { 0, 0, 1, -1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ํ์ด์ ๊ฐ์
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
// ๊ฐ์ฅ ๋์ ๋์ด
int max = 0;
// ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์
int res_max = 0;
// ๋์ด ์
๋ ฅ
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
max = Math.max(arr[i][j], max);
}
}
for (int i = 0; i < max; i++) {
res = 0;
// ๊น์ด๊ฐ ๋ฎ์ ๊ฒ์ true ์ฒ๋ฆฌ
boolean[][] v = new boolean[N][N];
for (int j = 0; j < N; j++) {
for (int z = 0; z < N; z++) {
if (arr[j][z] <= i) {
v[j][z] = true;
}
}
}
for (int j = 0; j < N; j++) {
for (int z = 0; z < N; z++) {
// ๋ฐฉ๋ฌธํ์ง ์์๊ฑฐ๋ ์ ๊ธฐ์ง ์์์ผ๋ฉด dfs ์คํ
if (!v[j][z]) {
dfs(j, z, v);
res++;
}
else {
continue;
}
}
}
res_max = Math.max(res, res_max);
}
System.out.println(res_max);
}
// boolean ๋ฐฐ์ด์ true ์
๋ ฅํด์ฃผ๋ ์ญํ
static void dfs(int y, int x, boolean[][] v) {
// ๊ธฐ์ ์กฐ๊ฑด : ์ ๊ธฐ์ง ์์ ์ง์ญ ๋ค
if (v[y][x]) {
return;
}
// ์ ๊ธฐ์ง๋ ์๊ณ ๋ฐฉ๋ฌธํ์ง๋ ์์์ผ๋ฉด
if(!v[y][x]) {
v[y][x] = true;
int nx, ny;
for (int i = 0; i < 4; i++) {
nx = x + dx[i];
ny = y + dy[i];
// ๋ฒ์๋ฅผ ๋ฒ์ด
if (nx < 0 || ny < 0 || nx >= N || ny >= N) {
continue;
}
dfs(ny, nx, v);
}
}
}
}
๐ค ๋์ ์๊ฐ
๋จผ์ ๋ฌธ์ ๋ฅผ ์ดํดํด๋ณด์๋ฉด ๋์ด๊ฐ ๋ค์ํ ์ง์ญ๋ค์ด ์๋ค. ๋น๊ฐ ์ค๋ ์์ ๋ฐ๋ผ ์ง์ญ์ด ์ ๊ธฐ๋ ๋ง๋๊ฐ ๊ฒฐ์ ๋๋ค.
๋น๊ฐ ๋ง์ด ์์ ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์ง์ญ๋ค์ ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ํ ๊ณต๊ฐ์ผ๋ก ํ๋จํ๋ค. ๋๊ฐ์ ์ ์ฐ๊ฒฐ์ด๋ผ๊ณ ์น์ง ์๋๋ค.
๊ทธ ๊ณต๊ฐ๋ค์ ์ด ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค. ๊ทธ ์ด ๊ฐ์๋ค ์ค ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ๋ฌธ์ ์ด๋ค.
ํ ๋ง๋๋ก ๋น๊ฐ ๋ด๋ ค์ ์์ด 1, 2, 3, 4 .. ์ผ ๋๋ง๋ค ์ ๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ค ๋ค๋ฅด๊ณ ๊ฑฐ๊ธฐ์ ๋ฐ๋ผ ์์ ํ ์์ญ์ ๊ฐ์๊ฐ ๋ค ๋ค๋ฅธ๋ฐ ๊ทธ ๋ ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.
๋๋ ๋น๊ฐ ์์ ์ ๊ธด ๋ถ๋ถ๊ณผ ์ด๋ฏธ ๊ฒ์ฌ๋ฅผ ํ ๋ถ๋ถ์ boolean ๋ฐฐ์ด์์ true ๋ถ๋ถ์ด๋ผ ์ค์ ํ๊ณ ์์ ํ์์ ํ๋ฉฐ false ๋ถ๋ถ์์ dfs ํ์์ ํด์ฃผ์๋ค.
dfs ํ์ ํ ๋ฒ ํ ๋๋ง๋ค ์นด์ดํ
์ ํด์ฃผ์ด ๋น์ ์๋ง๋ค ์นด์ดํ
๋ค์ ๋น๊ตํด ์ต๋๊ฐ์ ๊ตฌํ๋ค.
dfs, bfs ์ด๋ ๊ฒ์ ์ฐ๋ ์๊ด์์ง๋ง ๋๋ dfs ๊ฐ ๋ ํธํด์ dfs๋ฅผ ์ฌ์ฉํ์๋ค.