- ์นด์นด์ค2021
- ์น๋ฆฐ์ด
- ํธ๋ฆฌ
- LCs
- BFS
- ์ํฐ๋
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ์นด์นด์ค ์ฝํ
- Union-Find
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋นํธ๋งต
- ์์ฝ๋
- DP
- js
- ์ด๋ถํ์
- ๋ฐฑ์ค
- ํ๋ฆฌ์จ๋ณด๋ฉ
- golang
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์ฌ๊ท
- go
- ๋นํธ๋ง์คํน
- ๋ค์ต์คํธ๋ผ
- DFS
- C++
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ์๊ณ ๋ฆฌ์ฆ
- nestjs
- ํ๋ก๊ทธ๋๋จธ์ค
- Python
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 1520. ๋ด๋ฆฌ๋ง ๊ธธ ๋ณธ๋ฌธ
๋ฌธ์
1520๋ฒ: ๋ด๋ฆฌ๋ง ๊ธธ
์ฌํ์ ๋ ๋ ์ธ์ค์ด๋ ์ง๋๋ฅผ ํ๋ ๊ตฌํ์๋ค. ์ด ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ
www.acmicpc.net
ํ์ด
์ฒ์์๋ DP๋ง ์ด์ฉํด์, cache[i][j]์ (i,j) ์์น๊น์ง ๋์ฐฉํ ์ ์๋ ๋ชจ๋ ๋ด๋ฆฌ๋ง๊ธธ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ๋ค.
ํ์ง๋ง, ์ํ์ข์ฐ๋ก ๋ชจ๋ ์ด๋์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ ์คํจํ๋ค.
๋ ๋ฒ์งธ ์๊ฐ๋ ๋ฐฉ๋ฒ์, ์ต๋จ๊ฒฝ๋ก์ฐพ๊ธฐ ๋ฌธ์ ๋ก ํด์ํด์ BFS๋ก ํธ๋ ๋ฐฉ๋ฒ์ด์๋ค.
ํ์ง๋ง, ์๊ฐ์ด๊ณผ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ ์คํจํ๋ค.
์ต์ข ๋ฐฉ๋ฒ์, DFS์ DP๋ฅผ ์ ๋ชฉํ ๋ฐฉ๋ฒ์ด๋ค. DFS๋ก ํ์ํ๋, DP์ ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ์ ์ ๋ชฉํ ๊ฒ์ด๋ค.
cache[i][j] : (i,j) ์์น ๋ถํฐ, ๋งจ ์ผ์ชฝ ๋งจ ์๋(๋์ฐฉ์ง์ ) ๊น์ง ๊ฐ ์ ์๋ ๋ชจ๋ ๋ด๋ฆฌ๋ง๊ธธ ๊ฒฝ์ฐ์ ์
์ฆ, DFS ํ์๊ณผ์ ์ค์, ์ด์ ์ ํ์ํ๋ ์ขํ์ ๋ค์ ๋๋ฌํ ๊ฒฝ์ฐ, ๋ค์ ํ์ํ์ง ์๊ณ cache๊ฐ์ ์ด์ฉํด์ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ์์๋ด๋ ๊ฒ์ด๋ค.
- cache๋ฅผ -1๋ก ์ด๊ธฐํ ํด์ฃผ์๋ค.
- cache๊ฐ์ด 0์ผ ๋, ํ์ํ ์ ์ด ์๋ ์ขํ๊ฐ ์๋๋ผ ํ์ํด๋ดค๋๋ฐ ๊ฒฝ๋ก๊ฐ 0๊ฐ๋๋ผ ๋ผ๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ ํ์ํ ์ ์ด ์๋ ์ขํ๋ฅผ -1๋ก ๊ตฌ๋ถํด์ฃผ๊ธฐ ์ํจ์ด๋ค.
- DFS๋ ์ฌ๊ท๋ก ๊ตฌํํ์๋ค.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
int table[501][501];
int cache[501][501];
// U, D, L, R
int dc[4] = { -1,1,0,0 };
int dr[4] = { 0,0,-1,1 };
int dfs(int c, int r) {
if (r == n - 1 && c == m - 1) // ๋ชฉ์ ์ง์ ๋์ฐฉ (๋)
return 1;
if (cache[c][r] != -1) // ์ด์ ์ ๋ฐฉ๋ฌธํ์ ์ด ์์ผ๋ฉด, cache return
return cache[c][r];
cache[c][r] = 0; // ๋ฐฉ๋ฌธ ํ์
int temp = table[c][r];
for (int i = 0;i < 4;i++) { // ์ํ์ข์ฐ
int nc = c + dc[i];
int nr = r + dr[i];
if (nc >= 0 && nc < m && nr >= 0 && nr < n) {
if (table[nc][nr] < temp)
cache[c][r] += dfs(nc, nr);
}
}
return cache[c][r];
}
int main(void) {
cin >> m >> n;
fill(&cache[0][0], &cache[500][501], -1); // -1๋ก ์ด๊ธฐํ
for (int i = 0;i < m;i++) {
for (int j = 0;j < n;j++) {
cin >> table[i][j];
}
}
int answer = dfs(0, 0);
cout << answer << endl;
return 0;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2225. ํฉ๋ถํด (0) | 2021.03.24 |
---|---|
[๋ฐฑ์ค/C++] 12865. ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.03.14 |
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ํฉ์น ํ์ ์๊ธ (0) | 2021.03.01 |
[๋ฐฑ์ค/C++] 1175. ๋ฐฐ๋ฌ (0) | 2021.02.26 |
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ์ ๊ท ์์ด๋ ์ถ์ฒ (0) | 2021.02.08 |