https://www.acmicpc.net/problem/17070
๋ฌธ์
์ ํ์ด๊ฐ ์ ์ง์ผ๋ก ์ด์ฌํ๋ค. ์ ์ง์ ํฌ๊ธฐ๋ N×N์ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ๊ฐ์ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๋ค. ์ฌ๊ธฐ์ r์ ํ์ ๋ฒํธ, c๋ ์ด์ ๋ฒํธ์ด๊ณ , ํ๊ณผ ์ด์ ๋ฒํธ๋ 1๋ถํฐ ์์ํ๋ค. ๊ฐ๊ฐ์ ์นธ์ ๋น ์นธ์ด๊ฑฐ๋ ๋ฒฝ์ด๋ค.
์ค๋์ ์ง ์๋ฆฌ๋ฅผ ์ํด์ ํ์ดํ ํ๋๋ฅผ ์ฎ๊ธฐ๋ ค๊ณ ํ๋ค. ํ์ดํ๋ ์๋์ ๊ฐ์ ํํ์ด๊ณ , 2๊ฐ์ ์ฐ์๋ ์นธ์ ์ฐจ์งํ๋ ํฌ๊ธฐ์ด๋ค.
ํ์ดํ๋ ํ์ ์ํฌ ์ ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ด 3๊ฐ์ง ๋ฐฉํฅ์ด ๊ฐ๋ฅํ๋ค.
ํ์ดํ๋ ๋งค์ฐ ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์, ์ ํ์ด๋ ํ์ดํ๋ฅผ ๋ฐ์ด์ ์ด๋์ํค๋ ค๊ณ ํ๋ค. ๋ฒฝ์๋ ์๋ก์ด ๋ฒฝ์ง๋ฅผ ๋ฐ๋๊ธฐ ๋๋ฌธ์, ํ์ดํ๊ฐ ๋ฒฝ์ ๊ธ์ผ๋ฉด ์ ๋๋ค. ์ฆ, ํ์ดํ๋ ํญ์ ๋น ์นธ๋ง ์ฐจ์งํด์ผ ํ๋ค.
ํ์ดํ๋ฅผ ๋ฐ ์ ์๋ ๋ฐฉํฅ์ ์ด 3๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, →, โ, ↓ ๋ฐฉํฅ์ด๋ค. ํ์ดํ๋ ๋ฐ๋ฉด์ ํ์ ์ํฌ ์ ์๋ค. ํ์ ์ 45๋๋ง ํ์ ์ํฌ ์ ์์ผ๋ฉฐ, ๋ฏธ๋ ๋ฐฉํฅ์ ์ค๋ฅธ์ชฝ, ์๋, ๋๋ ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ ๋ฐฉํฅ์ด์ด์ผ ํ๋ค.
ํ์ดํ๊ฐ ๊ฐ๋ก๋ก ๋์ฌ์ง ๊ฒฝ์ฐ์ ๊ฐ๋ฅํ ์ด๋ ๋ฐฉ๋ฒ์ ์ด 2๊ฐ์ง, ์ธ๋ก๋ก ๋์ฌ์ง ๊ฒฝ์ฐ์๋ 2๊ฐ์ง, ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๋์ฌ์ง ๊ฒฝ์ฐ์๋ 3๊ฐ์ง๊ฐ ์๋ค.
์๋ ๊ทธ๋ฆผ์ ํ์ดํ๊ฐ ๋์ฌ์ง ๋ฐฉํฅ์ ๋ฐ๋ผ์ ์ด๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๋ํ๋ธ ๊ฒ์ด๊ณ , ๊ผญ ๋น ์นธ์ด์ด์ผ ํ๋ ๊ณณ์ ์์ผ๋ก ํ์๋์ด์ ธ ์๋ค.
๊ฐ๋ก
์ธ๋ก
๋๊ฐ์
๊ฐ์ฅ ์ฒ์์ ํ์ดํ๋ (1, 1)์ (1, 2)๋ฅผ ์ฐจ์งํ๊ณ ์๊ณ , ๋ฐฉํฅ์ ๊ฐ๋ก์ด๋ค. ํ์ดํ์ ํ์ชฝ ๋์ (N, N)๋ก ์ด๋์ํค๋ ๋ฐฉ๋ฒ์ ๊ฐ์๋ฅผ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ํฌ๊ธฐ N(3 ≤ N ≤ 16)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ง์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๋น ์นธ์ 0, ๋ฒฝ์ 1๋ก ์ฃผ์ด์ง๋ค. (1, 1)๊ณผ (1, 2)๋ ํญ์ ๋น ์นธ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์ดํ์ ํ์ชฝ ๋์ (N, N)์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋์ํฌ ์ ์๋ ๊ฒฝ์ฐ์๋ 0์ ์ถ๋ ฅํ๋ค. ๋ฐฉ๋ฒ์ ์๋ ํญ์ 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
ํ์ด
https://hyeyun.tistory.com/entry/๋ฐฑ์ค-BOJ-17069-ํ์ดํ-์ฎ๊ธฐ๊ธฐ-2
ํ์ดํ ์ฎ๊ธฐ๊ธฐ 2 ์ ํ์ด๊ฐ ๋์ผํ๋ค. 2๋ฅผ ๋จผ์ ํ์ด์ ใ ใ ... ๐ค
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_BOJ_17070_ํ์ดํ์ฎ๊ธฐ๊ธฐ1 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
int N = Integer.parseInt(br.readLine());
int[][] house = new int[N+1][N+1];
int[][][] DP = new int[N+1][N+1][3];
// 0 : ๊ฐ๋ก, 1 : ์ธ๋ก, 2 : ๋๊ฐ์
for(int i = 1; i < N+1 ; i++){
stringTokenizer = new StringTokenizer(br.readLine());
for(int j = 1; j < N+1; j++){
house[i][j] = Integer.parseInt(stringTokenizer.nextToken());
}
}
DP[1][2][0] = 1;
for(int i = 1 ; i <= N ; i++){
for(int j = 3; j <= N ; j++){
if(house[i][j] == 0){
// ๊ฐ๋ก
DP[i][j][0] = DP[i][j-1][0] + DP[i][j-1][2];
// ์ธ๋ก
DP[i][j][1] = DP[i-1][j][1] + DP[i-1][j][2];
// ๋๊ฐ์
if(house[i-1][j] != 1 && house[i][j-1] != 1){
DP[i][j][2] = DP[i-1][j-1][0] + DP[i-1][j-1][1] + DP[i-1][j-1][2];
}
}
}
}
System.out.println(DP[N][N][0] + DP[N][N][1] + DP[N][N][2]);
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 1120] ๋ฌธ์์ด (0) | 2021.09.29 |
---|---|
[ ๋ฐฑ์ค / BOJ 14467 ] ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 1 (0) | 2021.09.15 |
[ ๋ฐฑ์ค / BOJ 17208 ] ์นด์ฐ๋ฒ๊ฑฐ ์๋ฐ์ (0) | 2021.09.15 |
[ ๋ฐฑ์ค / BOJ 1958 ] LCS 3 (0) | 2021.09.15 |
[๋ฐฑ์ค / BOJ 12871] ๋ฌดํ ๋ฌธ์์ด (0) | 2021.09.14 |