๋ฌธ์
https://www.acmicpc.net/problem/17069
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n;
static int[][] map;
static long[][][] memo; // ๊ฐ์ฅ ํ์ ์ธ๋ฑ์ค 0, 1, 2 == ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์
public static long dp() {
for(int i = 1; i < n+1; i++) {
for(int j = 3; j < n+1; j++) {
if(map[i][j] == 1) continue; // ๋ฒฝ์ด๋ฉด ์ด๋ค ํ์ดํ๋ ๋ถ๊ฐํ๋ฏ๋ก continue
memo[i][j][0] = memo[i][j-1][0] + memo[i][j-1][2]; // ๊ฐ๋ก
if(i == 1) continue; // ์ฒซ ๋ฒ์งธ ์ค์ผ ๊ฒฝ์ฐ, ์ธ๋ก๊ฐ ์ ๋ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ continue
memo[i][j][1] = memo[i-1][j][1] + memo[i-1][j][2]; // ์ธ๋ก
if(map[i-1][j] == 1 || map[i][j-1] == 1) continue; // ๋๊ฐ์ ์ผ๋ก ์ค๋ ค๋ฉด ์, ์๋๋ ๋ชจ๋ ๋น ์นธ์ด์ด์ผ ํ๋ฏ๋ก continue
memo[i][j][2] = memo[i-1][j-1][0] + memo[i-1][j-1][1] + memo[i-1][j-1][2]; // ๋๊ฐ์
}
}
return memo[n][n][0] + memo[n][n][1] + memo[n][n][2];
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(in.readLine());
map = new int[n+1][n+1];
for(int i = 1; i < n+1; i++) {
st = new StringTokenizer(in.readLine());
for(int j = 1; j < n+1; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
memo = new long[n+1][n+1][3];
memo[1][2][0] = 1;
if(map[n][n] == 1) {
System.out.println(0);
} else {
System.out.println(dp());
}
}
}
๐ DP ๋ฌธ์
ํ์ฌ ํ์ดํ์์ ๋ค์ ํ์ดํ๋ก ๊ฐ ๋ ์ด๋ป๊ฒ ๊ฐ์ง๋ฅผ ์๊ฐํ๊ธฐ๋ณด๋ค,
ํ์ฌ ์๋ฆฌ์ (๊ฐ๋ก or ์ธ๋ก or ๋๊ฐ์ )์ ๋ฐฉํฅ์ผ๋ก ์ค๋๋ฐ์๋ ๋ช ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์์ง๋ฅผ ์๊ฐํด ์ฃผ๋๊ฒ ํฌ์ธํธ โจ
- map๊ณผ ๊ฐ์ ํฌ๊ธฐ์ 3์ฐจ์ ๋ฐฐ์ด memo๋ฅผ ๋ง๋ค๊ณ , memo์ ๊ฐ์ฅ ํ์๋ 3์ ํฌ๊ธฐ๋ก ๋ง๋ค์ด์
์ธ๋ฑ์ค 0, 1, 2 ์์๋๋ก ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์ ์ผ๋ก ์ฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ๋๋ก ํ๋ค. - memo์ ์ฒ์ ์์ํ๋ ํ์ดํ์ ์ ๋ณด๋ฅผ ๋ด์ ์ด๊ธฐํํด์ฃผ๊ณ , dp ๋ฉ์๋์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋์ ํ๋ค.
- dp์์๋ ์ฒซ ๋ฒ์งธ ์ค์ ์ธ ๋ฒ์งธ ์๋ฆฌ(์ฒซ ํ์ดํ์ ๋ค์ ์๋ฆฌ)๋ถํฐ ํ์์ ์์ํด์ฃผ์๋๋ฐ
๋ฌธ์ ์์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์ถฐ ๊ฐ๊ฐ ์ธ๋ก, ๊ฐ๋ก, ๋๊ฐ์ ์ผ๋ก ํด๋น ์๋ฆฌ์ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋์ ํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์ฒ์์ ์ด ๋ฌธ์ ๋ฅผ ์ฌ๊ท๋ก ํ์๋๋ฐ(ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 ๋ฌธ์ ), 3์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๊ฐ ์๋ฆฌ๋ง๋ค
๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ฃผ๋ฉด ํจ์ฌ ํจ์จ์ ์ผ๋ก ํ์ดํ ์ ์์๋ค.
๐ ์ด ๋ฌธ์ ๊ฐ ์ด๋ ค์ฐ์ ๋ถ๋ค์ RGB ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ๋จผ์ ํ๊ณ ์ค์๋ฉด ์ฝ๊ฒ ์ดํด ๊ฐ๋ฅํ์ค ๋ฏ ํฉ๋๋น!
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ๋ฒฝ๋ ๊นจ๊ธฐ SWEA #5656 (1) | 2022.10.04 |
---|---|
[Java Algorithm] RGB ๊ฑฐ๋ฆฌ 2 BOJ #17404 (0) | 2022.10.02 |
[Java Algorithm] ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 BOJ #17070 (2) | 2022.09.30 |
[Java Algorithm] ์ธ๊ตฌ ์ด๋ BOJ #16234 (0) | 2022.09.22 |
[Java Algorithm] ์ต์ ํ์์ค ๊ฐ์ BOJ #19598 (0) | 2022.08.31 |
๋๊ธ