BOJ_G5_14500
๐ [G5_14500] ํ ํธ๋ก๋ฏธ๋ ธ
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static int[][] map;
static boolean[][] v;
static int max = Integer.MIN_VALUE;
static int sum;
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));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// ์ธ๋ก ํฌ๊ธฐ
N = Integer.parseInt(st.nextToken());
// ๊ฐ๋ก ํฌ๊ธฐ
M = Integer.parseInt(st.nextToken());
// ๋ฐฐ์ด
map = new int[N][M];
// ๋ฐฉ๋ฌธ ์ฒดํฌ
v = new boolean[N][M];
// ๋ฐฐ์ด ์
๋ ฅ
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
v[i][j] = true;
// ๊ฐ์ ๋ํด์ฃผ๊ณ ๋ค์ด๊ฐ๊ธฐ
// ์ฒซ ์ขํ๋ ๊ณ ์
sum = map[i][j];
dfs(0, j, i);
// ๋ฐฑํธ๋ํน
v[i][j] = false;
// 'ใ
' ๋ชจ์ 4๊ฐ์ง ํ์ธ
check(j,i);
}
}
// ์ต๋๊ฐ ์ถ๋ ฅ
System.out.println(max);
}
static void dfs(int idx, int x, int y) {
// ๊ธฐ์ ์กฐ๊ฑด 4์นธ ์ด๋ ( ์ฒ์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ ๋์ด ์จ๋ค )
if (idx == 3) {
max = Math.max(max, sum);
return;
}
// 4๋ฐฉํฅ ํ์
int nx, ny;
for (int i = 0; i < 4; i++) {
nx = x + dx[i];
ny = y + dy[i];
// ๋ฒ์ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ , ์ด๋ฏธ ๊ฐ๋ ๊ฒฝ์ฐ
if (nx < 0 || ny < 0 || nx > M - 1 || ny > N - 1 || v[ny][nx])
continue;
// ๋ฐฉ๋ฌธ ์ฒดํฌ
v[ny][nx] = true;
sum += map[ny][nx];
dfs(idx + 1, nx, ny);
// ๋ฐฑํธ๋ํน
v[ny][nx] = false;
sum -= map[ny][nx];
}
}
// ใ
๋ชจ์ ๋ฐ๋ก ๊ฒ์ฌ
static void check(int x, int y) {
// ใ
if (x >= 0 && y >= 0 && x + 1 < M && y + 2 < N) {
max = Math.max(max, map[y][x] + map[y + 1][x] + map[y + 2][x] + map[y + 1][x + 1]);
}
// ใ
if (x < M && y >= 0 && x - 1 >= 0 && y + 2 < N) {
max = Math.max(max, map[y][x] + map[y + 1][x - 1] + map[y + 1][x] + map[y + 2][x]);
}
// ใ
if (x >= 0 && y >= 0 && x + 2 < M && y + 1 < N) {
max = Math.max(max, map[y][x] + map[y][x + 1] + map[y][x + 2] + map[y + 1][x + 1]);
}
// ใ
if (x + 1 < M && y >= 0 && x - 1 >= 0 && y + 1 < N) {
max = Math.max(max, map[y][x] + map[y + 1][x - 1] + map[y + 1][x] + map[y + 1][x + 1]);
}
}
}
๐ค ๋์ ์๊ฐ
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ผ๋จ ๋์นญ, ํ์ ๋์ด์ ๊ทธ๋ ค์ง๋ ๊ทธ๋ฆผ์ ๋ค ๊ทธ๋ ค๋ณด์๋ค.
๊ทธ๋ฆฌ๊ณ ์ํ์ธ ๊ฒ์ ๋๊ผ์ง๋ง ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ๋ฐ๋ก ๊ฐ์ด ์กํ์ง ์๋ค๊ฐ
6์กฐ๊ฐ์ ๋ฐํ์ผ๋ก ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ๊ฑฐ์น๋ ๊ฒ์ด์๋ค.
๊ทธ๋์ for๋ฌธ์ผ๋ก ๋ค ๋๋ฉด์ ํ ์ ๋ง๋ค dfs๋ฅผ ํตํด ํ์ธํด ์ฃผ์๋ค.
๊ทธ๋ฌ๋ ํ๊ฐ์ง ๋์น๊ฒ ์์๋ค.
๋ฐ๋ก !! โใ
โ ์ด ๊ฒ์ด๋ค.
์ด ๋ชจ์์ ๊น์ด ์ฐ์ ํ์์ผ๋ก ์ฐพ์์ง์ง ์๋๋ค. ๊ทธ๋์ ๋ฐ๋ก ๋นผ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด ์ด ๋ฌธ์ ์ ์์์? ์ธ ๊ฒ ๊ฐ๋ค.
๊ฒฐ๊ตญ ์ํ์์ dfs๋ฅผ ํ์ฉํ๊ณ โใ
โ ๋ชจ์ 4๊ฐ์ง๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค !!