https://www.acmicpc.net/problem/18430
18430๋ฒ: ๋ฌด๊ธฐ ๊ณตํ
์ฒซ์งธ ์ค์๋ ๊ธธ๋์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋๋ฌด ์ฌ๋ฃ์ ์ธ๋ก, ๊ฐ๋ก ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ ๋ ์์ฐ์ N, M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 5) ๋ค์ N๊ฐ์ ์ค์ ๊ฑธ์ณ์, ๋งค ์ค๋ง๋ค ๋๋ฌด ์ฌ๋ฃ์ ๊ฐ ์์น์ ๊ฐ๋๋ฅผ ๋ํ๋ด
www.acmicpc.net
1. ๋ฌธ์ ์์ฝ
NxMํฌ๊ธฐ์ map์์ ๋ถ๋ฉ๋์ ํญ์ 3์นธ์ ์ฐจ์งํ๋ ์๋์ 4๊ฐ์ ๋ชจ์๋ง ๊ฐ๋ฅํ๋ค.
๋ถ๋ฉ๋์ ๊ฐ๋๋ ๋ถ๋ฉ๋ 3์นธ์ ํด๋นํ๋ map ๊ฐ์ ํฉ์ด๋ฉฐ, ๋ถ๋ฉ๋์ ์ค์ฌ์ด ๋๋ ์นธ์ map ๊ฐ์ 2๋ฐฐ๊ฐ ๋๋ค.
์ฆ, ์ด ๋ ์์ ๊ฐ๋๋ 5 + 2*2 + 9 ์ธ ์ ์ด๋ค.
๊ฐ๋ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
[์ ์ฝ์กฐ๊ฑด]
- map์ ํฌ๊ธฐ๊ฐ ๋ถ๋ฉ๋์ด ์์ ์ ์๋ ํฌ๊ธฐ๋ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
2. ํ์ด
๋ฐฑํธ๋ํน ๋ฌธ์ ์ด๋ค.
๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๊ณ ๊ทธ ์ค์์ ์ต๋๊ฐ์ ๊ฐฑ์ ํด์ผ ํ๋ค.
1. dfs๋ฅผ ๋ ๋๋ง๋ค ๊ฐ๋ ํฉ์ ์ต๋๊ฐ์ ๊ฐฑ์ ํด์ฃผ์๋ค.
- ๊ฐ ๊ฒฝ์ฐ๋ง๋ค dfs๊ฐ ๋๋๋ ์ง์ ์ด ๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.(dfs๊ฐ ์ธ์ ๋๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ)
2. => ๋ฐฉํฅ์ผ๋ก ์ญ x๊ฐ์ +1ํด์ฃผ๋ค๊ฐ x>=M ์ด ๋ ๊ฒฝ์ฐ y๊ฐ์ ๋๋ ค์ฃผ๊ณ x๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํด์คฌ๋ค.
3. ์ด ๋ y>=N๋ผ๋ฉด, (y์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ฉด) returnํ์ฌ ๊ฐ์ง์น๊ธฐ๋ฅผ ํด์ฃผ์๋ค.
4. ์ด๋ฏธ y, x ์ขํ์ ๋ถ๋ฉ๋์ด ๋์ฌ์ ธ ์๋ค๋ฉด, ๋ค์์ขํ(=>)๋ก dfs๋ฅผ ๋๋ค.
5. ์์ง y, x ์ขํ์ ๋ถ๋ฉ๋์ด ๋์ฌ์ ธ ์์ง ์๋ค๋ฉด, ํด๋น ์ขํ๋ฅผ ๋ถ๋ฉ๋์ ์ค์ฌ์ผ๋ก 4๊ฐ์ง ํ์ ์ ๋ถ๋ฉ๋์ ์ ๋ถ ๋์๋ณธ๋ค.
- ๋์ ์ ์๋ค๋ฉด ๋์ ํฉ์ ํ์ฌ ๋ถ๋ฉ๋ ๊ฐ๋ ํฉ์ ๋ํด์ฃผ๊ณ , ๋ค์์ขํ(=>)๋ก dfs๋ฅผ ๋๋ค.
- ๋์ ์ ์๋ค๋ฉด, (4๊ฐ์ง ํ์ ์ ๋ค ๋ดค๋๋ฐ๋ ๋์ ์ ์์ด์ for๋ฌธ์ด ๋๋ฌ๋ค๋ฉด)
๋์ ํฉ ๊ทธ๋๋ก ๋ค์์ขํ(=>)๋ก dfs๋ฅผ ๋๋ค.
๋งจ ๋ง์ง๋ง ์กฐ๊ฑด์์ ์ค๋๊ฑธ๋ ธ๋ค.
3. ์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ_18430_๋ฌด๊ธฐ๊ณตํ {
static int N, M, ans;
static int[][] map;
static boolean[][] visited;
static int[] dy1= {-1,-1, 0, 0};
static int[] dx1= { 0, 0,-1, 1};
static int[] dy2= { 0, 0, 1, 1};
static int[] dx2= { 1,-1, 0, 0};
public static void main(String[] args) throws Exception {
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());
}
} // ์
๋ ฅ ๋
if(N<2 || M<2) {
System.out.println(0);
return;
}
dfs(0,0,0);
System.out.println(ans);
}
static void dfs(int y, int x, int sum) {
ans = Math.max(ans, sum);
if (x>=M) {
y++;
x=0;
}
if (y>=N) return;
if (visited[y][x]) {
dfs(y,x+1,sum);
} else {
for (int type=0; type<4; type++) {
int ny1 = y+dy1[type];
int nx1 = x+dx1[type];
int ny2 = y+dy2[type];
int nx2 = x+dx2[type];
if (ny1<0 || ny1>=N || nx1<0 || nx1>=M || visited[ny1][nx1]) continue;
if (ny2<0 || ny2>=N || nx2<0 || nx2>=M || visited[ny2][nx2]) continue;
visited[ny1][nx1] = true;
visited[ny2][nx2] = true;
visited[y][x] = true;
int power = map[ny1][nx1] + map[ny2][nx2] + map[y][x]*2;
dfs( y, x+1, sum+power);
visited[ny1][nx1] = false;
visited[ny2][nx2] = false;
visited[y][x] = false;
}
dfs( y, x+1, sum);
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 20055 ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด - Java (1) | 2022.12.16 |
---|---|
[BOJ] 12100 2048(Easy) - Java (0) | 2022.11.13 |
[BOJ] 1094 ๋ง๋๊ธฐ - Java (0) | 2022.10.29 |
[BOJ] 17471 ๊ฒ๋ฆฌ๋งจ๋๋ง - Java (1) | 2022.10.28 |
[BOJ] 17779 ๊ฒ๋ฆฌ๋งจ๋๋ง2 - Java (0) | 2022.10.27 |