2021. 12. 8. 17:07ใETC/Algorithm
DP ๊ด๋ จ ๋ฌธ์ ! ์ด ๋ฌธ์ ๋ ํ๋ก๊ทธ๋๋จธ์ค ์ฐ์ต ๋ฌธ์ ์ค ๋ฑ๊ตฃ๊ธธ์ ๋น์ทํ๋ค.
๋ฌธ์ ์ค๋ช
์นด์นด์ค๋ด๋น ๊ฐ๋ฐ์์ธ ์ ์ด์ง๋ ์๋ด ์ค์ฌ๊ฐ์ ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ค. ์ต๊ทผ ๋ค์ด ๋ณดํ์๊ฐ ์์ ๋กญ๊ณ ํธ๋ฆฌํ๊ฒ ๊ฑธ์ ์ ์๋๋ก ๋ณดํ์ ์ค์ฌ์ ๊ตํต ์ฒด๊ณ๊ฐ ๋์ ๋๋ฉด์ ๋์ฌ์ ์ผ๋ถ ๊ตฌ์ญ์ ์๋์ฐจ ํตํ์ด ๊ธ์ง๋๊ณ , ์ผ๋ถ ๊ต์ฐจ๋ก์์๋ ๋ณดํ์ ์์ ์ ์ํด ์ขํ์ ์ด๋ ์ฐํ์ ์ด ๊ธ์ง๋๊ธฐ๋ ํ๋ค. ๋ณต์กํด์ง ๋๋ก ํ๊ฒฝ์ผ๋ก ์ธํด ๊ธฐ์กด์ ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์ํด์ผ ํ ํ์๊ฐ ์๊ฒผ๋ค.
๋์ ์ค์ฌ๊ฐ์ ์ง๋๋ m × n ํฌ๊ธฐ์ ๊ฒฉ์ ๋ชจ์ ๋ฐฐ์ด city_map์ผ๋ก ์ฃผ์ด์ง๋ค. ์๋์ฐจ๋ ์ค๋ฅธ์ชฝ ๋๋ ์๋ ๋ฐฉํฅ์ผ๋ก ํ ์นธ์ฉ ์ด๋ ๊ฐ๋ฅํ๋ค.
city_map[i][j]์๋ ๋๋ก์ ์ํฉ์ ๋ํ๋ด๋ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ค.
- 0์ธ ๊ฒฝ์ฐ์๋ ์๋์ฐจ๊ฐ ์์ ๋กญ๊ฒ ์ง๋๊ฐ ์ ์๋ค.
- 1์ธ ๊ฒฝ์ฐ์๋ ์๋์ฐจ ํตํ์ด ๊ธ์ง๋์ด ์ง๋๊ฐ ์ ์๋ค.
- 2์ธ ๊ฒฝ์ฐ๋ ๋ณดํ์ ์์ ์ ์ํด ์ขํ์ ์ด๋ ์ฐํ์ ์ด ๊ธ์ง๋๋ค. (์ผ์ชฝ์์ ์ค๋ ์ฐจ๋ ์ค๋ฅธ์ชฝ์ผ๋ก๋ง, ์์์ ์ค๋ ์ฐจ๋ ์๋์ชฝ์ผ๋ก๋ง ์งํ ๊ฐ๋ฅํ๋ค)
๋์์ ๋๋ก ์ํ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ผ์ชฝ ์์ ์ถ๋ฐ์ ์์ ์ค๋ฅธ์ชฝ ์๋ ๋์ฐฉ์ ๊น์ง ์๋์ฐจ๋ก ์ด๋ ๊ฐ๋ฅํ ์ ์ฒด ๊ฐ๋ฅํ ๊ฒฝ๋ก ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๋ ์ปดํจํฐ๊ฐ ํํํ ์ ์๋ ์ ์์ ๋ฒ์๋ฅผ ๋์ด์ค ์ ์์ผ๋ฏ๋ก, ๊ฐ๋ฅํ ๊ฒฝ๋ก ์๋ฅผ 20170805๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ์ถ๋ ฅํ๋ผ.
์ ๋ ฅ ํ์
์ ๋ ฅ์ ๋์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ m๊ณผ n, ๊ทธ๋ฆฌ๊ณ ์ง๋๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด city_map์ผ๋ก ์ฃผ์ด์ง๋ค. ์ ํ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- 1 <= m, n <= 500
- city_map์ ํฌ๊ธฐ๋ m × n์ด๋ค.
- ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ๊ฐ์ 0, 1, 2 ์ค ํ๋์ด๋ค.
- ์ถ๋ฐ์ ์ ์ขํ๋ (0, 0), ๋์ฐฉ์ ์ ์ขํ๋ (m - 1, n - 1)์ด๋ค.
- ์ถ๋ฐ์ ๊ณผ ๋์ฐฉ์ ์ city_map[i][j] ๊ฐ์ 0์ด๋ค.
์ถ๋ ฅ ํ์
์ถ๋ฐ์ ์์ ๋์ฐฉ์ ๊น์ง ์ด๋ ๊ฐ๋ฅํ ์ ์ฒด ๊ฒฝ๋ก์ ์๋ฅผ 20170805๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฆฌํดํ๋ค.
์์ ์ ์ถ๋ ฅ
m | n | city_map | answer |
3 | 3 | [[0, 0, 0], [0, 0, 0], [0, 0, 0]] | 6 |
3 | 6 | [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] | 2 |
์์ ์ ๋ํ ์ค๋ช
์ฒซ ๋ฒ์งธ ์์ ๋ ๋ชจ๋ ๋๋ก๊ฐ ์ ํ ์์ด ํตํ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ก, ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ 6๊ฐ์ง์ด๋ค.
๋ ๋ฒ์งธ ์์ ๋ ๋ฌธ์ ์ค๋ช
์ ์๋ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์ด๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ ๋นจ๊ฐ ์ค์ ๊ณผ ๋
ธ๋ ์ ์ 2๊ฐ์ง๋ฟ์ด๋ค.
๋ฌธ์ ํด๊ฒฐ
C++
#include <vector>
typedef unsigned long ul;
using namespace std;
int solution(int m, int n, vector<vector<int>> city_map) {
vector<vector<vector<ul>>> pos(m+1, vector<vector<ul>>(n+1, vector<ul>(2)));
pos[1][1][0] = pos[1][1][1] = 1;
int MOD = 20170805;
for (int y=1; y <= m; y++) {
for (int x=1; x <= n; x++) {
if (city_map[y-1][x-1] == 0) {
pos[y][x][0] += (pos[y-1][x][0] + pos[y][x-1][1]) % MOD;
pos[y][x][1] += (pos[y-1][x][0] + pos[y][x-1][1]) % MOD;
} else if (city_map[y-1][x-1] == 1) pos[y][x][0] = pos[y][x][1] = 0;
else {
pos[y][x][0] = pos[y-1][x][0] % MOD;
pos[y][x][1] = pos[y][x-1][1] % MOD;
}
}
}
return pos[m][n][0] % MOD;
}
๊ฐ๋ก ๋ฐฉํฅ๊ณผ ์ธ๋ก ๋ฐฉํฅ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ๋ก ์ ์ฅํ๋ ํ์ ์ ์ ์์๋ค ~
'ETC > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers, ์ง๊ฒ๋ค๋ฆฌ (2) | 2021.12.10 |
---|---|
Programmers, ์ ๊ตญ์ฌ์ฌ (0) | 2021.12.04 |
programmers, ๋จ์์นด๋ฉ๋ผ (0) | 2021.12.03 |
Programmers, ์ฌ ์ฐ๊ฒฐํ๊ธฐ (2) | 2021.12.02 |
Programmers, ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ (0) | 2021.12.02 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐