์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ๊ทธ๋ฆฌ๋
- PriorityQueue
- upperbound
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- LowerBound
- ํ๋ก์ด๋์์
- Union Find
- ์๋ฃ๊ตฌ์กฐ
- ์ด๋ถํ์
- ๋นํธ๋ง์คํน
- ํ์๊ฐ์
- dp
- BFS
- ๋ค์ต์คํธ๋ผ
- ํธ๋ผ์ด
- Dijkstra
- ๋ถ๋ถ์งํฉ
- ์นด์นด์ค
- ํฌํฌ์ธํฐ
- Django
- Floyd
- ์ด์งํธ๋ฆฌ
- ๊ตฌํ
- ์ฌ๊ท
- ๋ฐฑํธ๋ํน
- ์กฐํฉ
- ์ฐ์ ์์ํ
- ์๋ฎฌ๋ ์ด์
- ์์ด
- dfs
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 17070 ํ์ดํ์ฎ๊ธฐ๊ธฐ1 ๋ณธ๋ฌธ
[JAVA] BOJ ๋ฐฑ์ค 17070 ํ์ดํ์ฎ๊ธฐ๊ธฐ1
snowball๐ฐ 2023. 3. 29. 16:09https://www.acmicpc.net/problem/17070
17070๋ฒ: ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1
์ ํ์ด๊ฐ ์ ์ง์ผ๋ก ์ด์ฌํ๋ค. ์ ์ง์ ํฌ๊ธฐ๋ N×N์ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ๊ฐ์ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๋ค. ์ฌ๊ธฐ์ r์ ํ์ ๋ฒํธ, c๋ ์ด์
www.acmicpc.net
DFS๋ก๋ DP๋ก๋ ํ ์ ์๋ ๋ฌธ์ ๋ค!
VER. DP
๐ก ์ ์ฒด ๋ก์ง
1. ๋ฌธ์ ์์ ํ์ดํ๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ด ๊ทธ ์ ํ์ดํ๊ฐ ๋์ฌ์ง ํํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ํ์ฌ ์์น์ ํ์ฌ ์ํ์์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ ์ฅํด์ผ ํ๋ค.
(์ฆ, ๋ ๋ถ๋ถ์ด (x, y)์ ์๊ณ ๊ฐ๋ก๋ก ๋์ฌ์ง ์ํ๋ก ํ์ดํ๋ฅผ ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ ์ฅํด์ผ ํจ)
2. 3์ฐจ์ ๋ฐฐ์ด์ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ์ ํ ๊ฒ์ด๋ค. (0-๊ฐ๋ก, 1-์ธ๋ก, 2-๋๊ฐ์ )
3. ๋ฌธ์ ์์ ์ ์๋ ๋น์ด์์ด์ผ ํ๋ ๊ณต๊ฐ์ ์ ๋ ํ๋ฉด์ DP ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
์ ์ฒด ์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ_17070{
static int[][] map;
static int[][][] d;
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
d = new int[N][N][3]; // 0์ผ๋ ๊ฐ๋ก, 1์ผ๋ ์ธ๋ก, 2์ผ๋ ๋๊ฐ์
map = new int[N][N];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
for(int j=0; j<N; j++)
map[i][j] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
for(int k=0; k<3; k++)
d[i][j][k] = -1;
for(int y=0; y<N; y++) {
d[0][y][1] = 0;
d[0][y][2] = 0;
d[y][0][0] = 0;
d[y][0][2] = 0;
}
d[0][1][0] = 1; // ํ์ดํ์ ์ฒ์ ์์น
System.out.println(pipe_ver(N-1, N-1)+pipe_hor(N-1, N-1)+pipe_dia(N-1, N-1));
}
static int pipe_ver(int x, int y) {
if(x < 0 || y < 0) return 0;
if(d[x][y][0] != -1) return d[x][y][0];
if(map[x][y] == 0) {
return d[x][y][0] = pipe_ver(x, y-1) + pipe_dia(x, y-1);
}
return 0;
}
static int pipe_hor(int x, int y) {
if(x < 0 || y < 0) return 0;
if(d[x][y][1] != -1) return d[x][y][1];
if(map[x][y] == 0) {
return d[x][y][1] = pipe_hor(x-1, y) + pipe_dia(x-1, y);
}
return 0;
}
static int pipe_dia(int x, int y) {
if(x < 0 || y < 0) return 0;
if(d[x][y][2] != -1) return d[x][y][2];
if(map[x][y] == 0 && map[x-1][y] == 0 && map[x][y-1] == 0) {
return d[x][y][2] = pipe_dia(x-1, y-1)+pipe_hor(x-1, y-1)+pipe_ver(x-1, y-1);
}
return 0;
}
}
DP ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ์ผ๋ฉด ๋ชจ๋ DP๊ฐ ๊ทธ๋ ๋ฏ ํ์ด๋ ์ด๋ ต์ง ์๋ค!
ํ ์ค ์ฉ ์ดํด๋ณด์!
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
for(int k=0; k<3; k++)
d[i][j][k] = -1;
for(int y=0; y<N; y++) {
d[0][y][1] = 0;
d[0][y][2] = 0;
d[y][0][0] = 0;
d[y][0][2] = 0;
}
d[0][1][0] = 1;
System.out.println(pipe_ver(N-1, N-1)+pipe_hor(N-1, N-1)+pipe_dia(N-1, N-1));
๊ฐ์ด ์ ์ฅ๋์ง ์์ ๊ฒ๋ค์ -1๋ก ์ธํ ํด์ค๋ค.
๋ ๋ถ๊ฐ๋ฅํ ๊ฐ๋ค๋ 0์ผ๋ก ์ธํ ํ๊ณ ์ด๊ธฐ๊ฐ์ ์ค๋ค.
์ ๋ต์ ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์ ์ผ๋ก ๋์ธ ๊ฒ๋ค์ ํฉ์ด๊ธฐ ๋๋ฌธ์ ๋ํ์ฌ ์ถ๋ ฅํ๋ค.
static int pipe_ver(int x, int y) {
if(x < 0 || y < 0) return 0;
if(d[x][y][0] != -1) return d[x][y][0];
if(map[x][y] == 0) {
return d[x][y][0] = pipe_ver(x, y-1) + pipe_dia(x, y-1);
}
return 0;
}
์ด ํจ์๋ x, y๋ฅผ ํ์ดํ์ ๋์ผ๋ก ํ๋ฉด์ ๊ฐ๋ก๋ก ๋์ธ ์ํ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํ์๋ฅผ returnํ๋ ํจ์์ด๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด (x, y)๊ฐ ๋ฒฝ์ธ ๊ฒฝ์ฐ์ ํ์ดํ๋ฃฐ ๋์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ ๊ฒฝ์ฐ 0์ return ํ๋ค.
๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ ์ผ์ชฝ ์๋ฆฌ๋ฅผ ๋์ผ๋ก ํ๋ ๊ฐ๋ก, ๋๊ฐ์ ํ์ดํ๊ฐ ์์ฑ๋ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ํฉ์ ์ ์ฅํ๊ณ returnํ๋ค.
๋๋จธ์ง ๋ ํจ์๋ ์์ ํจ์์ ๋น์ทํ๋ค.
'๐ Problem Solving > ๐ป Samsung SW Expert' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BOJ ๋ฐฑ์ค 3190 ๋ฑ (0) | 2023.07.07 |
---|---|
[JAVA] BOJ ๋ฐฑ์ค 19236 ์ฒญ์๋ ์์ด (0) | 2023.03.30 |
[JAVA] BOJ ๋ฐฑ์ค 17825 ์ฃผ์ฌ์ ์ท๋์ด (0) | 2023.03.06 |
[JAVA] BOJ ๋ฐฑ์ค 19237 ์ด๋ฅธ ์์ด (0) | 2023.03.06 |
[JAVA] BOJ ๋ฐฑ์ค 20061 ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2 (1) | 2023.03.05 |