๐พ ์๊ณ ๋ฆฌ์ฆ
- ๊ตฌํ
- ๋ธ๋ฃจํธํฌ์ค์๊ณ ๋ฆฌ์ฆ
- DFS(๊น์ด ์ฐ์ ํ์)
- 4๋ฐฉ ํ์
๐พ ์๊ฐ ํฌ์ธํธ
- ์ด 5๊ฐ์ง์ ํ ํธ๋ก๋ฏธ๋ ธ ์ค ํ๊ฐ์ง ํ ํธ๋ก๋ฏธ๋ ธ (ใ )์๋ชจ์๋นผ๊ณ ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ต๋๊ฐ์ ๊ตฌํ ์ ์๋ค.
- ์ด๊ฑฐ ๊ตฌ๋ถํด ๋ด๋ ๊ฒ์ด ๊ฐ์ฅ ๋์ด๋๊ฐ ์์๋ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ๋ค.
- DFS ๊ตฌํ์์๋ ์ธ์์ cnt์ ans๊ฐ์ ๋ฃ์ด์ฃผ์ด์ ๋ฉ์๋๊ฐ ์คํ๋ ๋๋ง๋ค ์ฆ๊ฐํ ์ ์๋๋ก ํ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๊ธฐํ๋ฅผ ์ํด์ค์ผํ๋ค. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋, ๋ฐฑํธ๋ํน์ฒ๋ผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ ๊ฑฐ๋ฅผ ๋ค์ ๋ฒ๋ณตํ๋ ๊ณผ์ ์ ํ ๋ ์ฃผ์ํด์ผํ๋ค๋ ์ ....!!!!!
๐พ ์์ค์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main_14500 {
static int[] dr = { -1, 0, 1, 0 };
static int[] dc = { 0, 1, 0, -1 };
static int N, M, cnt;
static int[][] map;
static int ans;
static int max = Integer.MIN_VALUE;
static boolean[][] visited;
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];
visited = 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++) {
//ใ
์ ๋ชจ์์ด ์๋ ๊ฒฝ์ฐ์ ํ
ํธ๋ก๋ฏธ๋
ธ
visited[i][j] = true;
dfs(i, j, 1, map[i][j]);
visited[i][j] = false;
//ใ
์ ๋ชจ์์ ํ
ํธ๋ก๋ฏธ๋
ธ๊ฐ ๋ค๊ฐ์ง ์ข
๋ฅ๋ก ํ์ ํ๋ ๊ฒฝ์ฐ
int sum = map[i][j];
if (i - 1 >= 0 && j - 1 >= 0 && j + 1 < M) {
sum += map[i - 1][j] + map[i][j - 1] + map[i][j + 1];
max = Math.max(max, sum);
}
sum = map[i][j];
if (j - 1 >= 0 && j + 1 < M && i + 1 < N) {
sum += map[i][j - 1] + map[i][j + 1] + map[i + 1][j];
max = Math.max(max, sum);
}
sum = map[i][j];
if (i - 1 >= 0 && j - 1 >= 0 && i + 1 < N) {
sum += map[i - 1][j] + map[i][j - 1] + map[i + 1][j];
max = Math.max(max, sum);
}
sum = map[i][j];
if (i - 1 >= 0 && i + 1 < N && j + 1 < M) {
sum += map[i - 1][j] + map[i + 1][j] + map[i][j + 1];
max = Math.max(max, sum);
}
}
}
System.out.println(max);
}
private static void dfs(int r, int c, int cnt, int ans) {
// ๊ธฐ์ ์กฐ๊ฑด
if (cnt == 4) {
max = Math.max(max, ans);
return;
}
for (int d = 0; d < 4; d++) {
int nr = r + dr[d];
int nc = c + dc[d];
if (nr >= 0 && nc >= 0 && nr < N && nc < M) {
if (!visited[nr][nc]) {
visited[nr][nc] = true;
// System.out.println(map[nr][nc]);
dfs(nr, nc, cnt + 1, map[nr][nc] + ans);
visited[nr][nc] = false;
}
}
}
}
}
๐ต๐ซ ๊ณต๋ถํด์ผ ํ ์
- ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๊ตฌํํด๋ด๋ ๋ฐฉ๋ฒ,, ๊ทธ๋ฅ ๊ตฌํ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ๊ฒ ๋ค.
- ๋ค๋ฅธ ํ์ด๋ค๋ ์ฐพ์๋ณด์..
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ_1759]์ํธ ๋ง๋ค๊ธฐ (๊ณจ๋ 5) - JAVA (0) | 2023.12.07 |
---|---|
[BOJ_1182]๋ถ๋ถ์์ด์ ํฉ (์ค๋ฒ 2) - JAVA (3) | 2023.11.30 |
[BOJ_16953] A->B (์ค๋ฒ 1) - JAVA (3) | 2023.10.20 |
[BOJ_7576] ํ ๋งํ (๊ณจ๋ 5) - JAVA (1) | 2023.10.11 |
[BOJ_2468] ์์ ์์ญ (์ค๋ฒ 1) (2) | 2023.10.09 |