๋์ด๋ : ๊ณจ๋ 4
๊ฑธ๋ฆฐ ์๊ฐ : 1์๊ฐ ๋ฐ ์ด์
๋ฌธ์
ํ์ด
- ์ฐ์ ์์ ํ์์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ์๊ฐํด๋ณธ๋ค.
- ์์ ํ์์ผ๋ก ๊ตฌํํ๋ค๋ฉด dfs๋ฅผ ์ฌ์ฉํด์ ์ฌ๊ท๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
- ์ฌ๊ท์ ๋งค๊ฐ๋ณ์(๋ฐ๋ ์ ๋ณด)๋ ํ์ฌ ์์น์ผ ๊ฒ์ด๊ณ , ๋ด๋ณด๋ด๋ ์ ๋ณด๋ ํ์ฌ ์์น์์ ๋ง์ง๋ง๊น์ง์ ๊ฒฝ๋ก์ ์์ผ ๊ฒ์ด๋ค.
- (0,0)์ ์ฒ์์ผ๋ก ์ฌ๊ทํจ์์ ๋๊ธฐ๋ฉด (0,0)์์ ๋๊น์ง์ ๊ฒฝ๋ก์ ์์ด๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ต์ด ๋์จ๋ค.
- ์ฌ๊ท๋ ์, ์ค๋ฅธ์ชฝ, ์๋, ์ผ์ชฝ์ผ๋ก ์ ํ ๋ถ๋ถ์ผ๋ก ์ฎ๊ฒจ๊ฐ๋ฉฐ ํด๋น ์ฅ์์ ๊ฒฝ๋ก์ ์๋ฅผ ํ์ฌ ์ฅ์์ ๊ฒฝ๋ก์ ์์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
- ์ด ๋, ์ฅ์๋ ๋งต ์์ ์์ด์ผํ๋ค.
- ์ด ๋, ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ๊ฐ ์ ์์ผ๋ฏ๋ก ํ์ฌ๋ณด๋ค ๋ ๋์ ์๋ฅผ ๊ฐ์ง ์ฅ์๋ ์ ์ธ์ด๋ค.
- ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ๊ฐ๋ ๊ณณ์ ๋ ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฏ๋ก DP๋ฅผ ์ด์ฉํ๋ค.
- ์ฌ๊ทํจ์์ return ์กฐ๊ฑด
- ์ฌ๊ทํจ์ ์ด๋ฐ์ memo๋ ๊ฒฝ๋ก์ ์๊ฐ ์๋ค๋ฉด ํด๋น ๊ฒฝ๋ก์ ์๋ฅผ ๋๊ฒจ์ค๋ค.
- ์ฌ๊ทํจ์ ์ด๋ฐ์ ํ์ฌ ์์น๊ฐ ๋(M-1, N-1)์ด๋ผ๋ฉด 1์ ๋๊ฒจ์ค๋ค.
์ฝ๋
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int M, N;
int arr[500][500];
int memo[500][500];
// ์ค => ์ => ์ผ => ์
int direction[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
bool isThereBad(int r, int c) {
// ๋งต ์์ ์๋์ง ํ์ธ
return (r < 0 || c < 0 || r >= M || c >= N);
}
int returnPathNum(int r, int c) {
if (memo[r][c] != -1)
return memo[r][c];
memo[r][c] = 0;
for (int i = 0; i < 4; i++) {
int row = r + direction[i][0];
int col = c + direction[i][1];
if (isThereBad(row, col))
continue;
if (arr[r][c] <= arr[row][col])
continue;
// ๋ด๋ฆฌ๋ง์ผ ๋
memo[r][c] += returnPathNum(row, col);
}
return memo[r][c];
}
int main() {
// ์๊ฐ์ ํ๋ฆ
// ์์ ํ์์ผ๋ก ๊ตฌ์ฑํ๋ค๋ฉด, ์ต๋จ ๊ฒฝ๋ก๊ฐ ์๋๋ฏ๋ก dfs ๊ณ ๋ ค
// ์ฌ๊ท๋ก ๊ตฌํํ ํ
๊ณ ์ฌ๊ทํจ์์์ DP๋ก returnํด์ค ์ ์๊ฒ ๊ตฌํ
// ์ฌ๊ท๋ก ๊ตฌํํ๋ฉด ๋ฐ๋ ์ ๋ณด๋ ํ์ฌ ์์น, ๋ด๋ณด๋ด๋ ์ ๋ณด๋ ํ์ฌ ์์น์์ ๊ฐ์ง ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ
// ํ์ฌ ์์น์์ ๋ชฉ์ ์ง๊น์ง ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐฏ์ = ์ฃผ์์ ๋ฎ์ ๊ณณ์ผ๋ก๋ถํฐ ์ค๋ ๊ฒฝ๋ก์ ํฉ
// ๋น ์ ธ๋๊ฐ๋ ์กฐ๊ฑด : M-1, N-1 ์ผ ๋ 1
// memo ๋์ด์์ ๋ memo๊ฐ
// memo๋ ๊ฒฝ๋ก์ ๊ฐฏ์๋ฅผ ๊ตฌํ๊ณ ๋์ ํ์
// ์
๋ ฅ ๋ฐ๊ธฐ
cin >> M >> N;
for (int i = 0; i < M; i++) { // 10^5
for (int j = 0; j < N; j++) {
cin >> arr[i][j];
}
}
memset(memo, -1, sizeof(memo));
memo[M - 1][N - 1] = 1;
cout << returnPathNum(0, 0);
}
- ์ฃผ์ํ ๊ฒ
- memset์ ์ด์ฉํ๋ ค๋ฉด
cstring
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํด์ผํ๋ค.
- memset์ ์ด์ฉํ๋ ค๋ฉด
๊ฒฐ๊ณผ
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 2225 :: ํฉ๋ถํด (0) | 2021.03.21 |
---|---|
[c++] BOJ 1149 :: RGB๊ฑฐ๋ฆฌ (0) | 2021.03.12 |
[c++] BOJ 12865 :: ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.03.12 |
[c++] BOJ 11054 :: ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (1) | 2021.03.06 |
[c++] BOJ 13023 :: ABCDE (ํ ์คํธ์ผ์ด์ค, ์ฝ๋) (0) | 2020.05.06 |
Comment