Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- IP
- 모두의캠퍼스
- React.js
- 북딜
- #Swagger-ui
- 쿠버네티스
- #Swagger
- 프로세스 통신
- #Swagger-editor
- javascript
- ecs
- server
- 쿠버네티스 컨트롤러
- fluentd
- Reducer
- React
- Site Reliability engineering
- 카카오게임즈
- #api 문서화
- 프로세스
- Redux
- #Swagger-codegen
- docker
- 기술PM
- SRE
- Kubernetes
- AWS
- #스웨거
- 모캠
- action
반응형
Archives
- Today
- Total
탕구리's 블로그
백준 알고리즘 1520번 내리막길 본문
반응형
동적계획법(Dynamic Programming)
DP를 이용하여 모든 경로를 탐색하되 지난적 있는 경로에 대해서는 Dp배열의 값을 이용하는 방법으로 해결
재귀를 이용하여 문제를 해결하였다.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; String[]k = in.readLine().split(" "); int row = Integer.parseInt(k[0]); int col = Integer.parseInt(k[1]); int[][] arr = new int[row+1][col+1]; int[][] dp = new int[row+1][col+1]; int result = 0; for(int i=1;i0;i-- ) { for(int j=col; j>0; j--) { result =0; solve(arr,dp, i,j,row,col,result); } } System.out.println(dp[1][1]); } static int solve(int[][] arr, int[][] dp,int m,int n, int row, int col, int result) { if(m == row && n == col) { return 1; } if(dp[m][n] != -1 ) return dp[m][n]; else { dp[m][n] = 0; if (m - 1 > 0 && arr[m - 1][n] < arr[m][n]) { dp[m][n] += solve(arr, dp, m - 1, n, row, col, result);; } if (m + 1 <= row && arr[m + 1][n] < arr[m][n]) { dp[m][n] += solve(arr, dp, m + 1, n, row, col, result); } if (n - 1 > 0 && arr[m][n - 1] < arr[m][n]) { dp[m][n] += solve(arr, dp, m, n - 1, row, col, result); } if (n + 1 <= col && arr[m][n + 1] < arr[m][n]) { dp[m][n] += solve(arr, dp, m, n + 1, row, col, result); } return dp[m][n]; } }
반응형
'Algorithm' 카테고리의 다른 글
백준 알고리즘 11727번 2*N 타일링 2 (0) | 2017.07.26 |
---|---|
백준 알고리즘 11053번 가장 긴 증가하는 부분 수열 (0) | 2017.07.26 |
백준 알고리즘 9465번 스티커 (0) | 2017.07.23 |
백준 알고리즘 1149번 동적계획법 기초 (0) | 2017.07.20 |
백준 알고리즘 1463번 동적계획법 기초 (0) | 2017.07.20 |
Comments