시간 & 메모리 제한
문제
입력 & 출력
DP를 이용한 문제 풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_1890 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[][] map = new int[N][N];
long[][] dp = new long[N][N];
for (int i = 0; i < N; i++) {
st= new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j]=Integer.parseInt(st.nextToken());
}
}
dp[0][0]=1;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(i==N-1 && j == N-1)break;
else {
int right = j + map[i][j];
int down = i + map[i][j];
if(right<N) dp[i][right]+=dp[i][j];
if(down<N) dp[down][j]+=dp[i][j];
}
}
}
System.out.println(dp[N-1][N-1]);
}
}
- 처음에는 DFS를 이용해서 문제풀이를 진행했었습니다... 잘 안풀려서 DP로 시도 했더니 쉽게 풀렸습니다.
- DP를 이용해서 문제 풀이를 진행했습니다... 그래서 map이라는 배열과 동시에 dp라는 배열을 만들었습니다.
- 이중 for문을 통해서 이동 가능한지를 dp를 통해서 체크를 해줍니다.
- 오른쪽으로 가는 경우와 아래로 가는 경우만 체크해 주면 되기 때문에 좀 수월하게 풀 수 있습니다.
- 2번 당했더니 이부분은 꼼꼼하게 잘 체크 했던거 같습니다... 바로 long형 쓰는거 잊으면 안됩니다.
2^63-1까지 표현 할수 있다는 것은 long형!
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_1965 상자넣기(자바) / 최장 증가 수열(LIS) (0) | 2021.05.11 |
---|---|
백준_9465 스티커(자바) / DP (0) | 2021.05.10 |
백준_2502 떡 먹는 호랑이(자바) / 브루드 포스 (0) | 2021.05.07 |
백준_1743 음식물 피하기(자바) / DFS & BFS (0) | 2021.05.06 |
백준_2846 오르막길(자바) / 구현 (0) | 2021.05.05 |