๋ฌธ์
ํ์ด
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int map[500][500];
int cache[501][501];
int N;
int findMaxWay(int row, int col) {
int &ret = cache[row][col];
// ๊ธฐ์ ์ฌ๋ก : ์ผ๊ฐํ์ ๋์ ๋๋ฌ
if (row == N - 1) {
return ret = map[row][col];
}
// ๋ฉ๋ชจ์ด์ ์ด์
if (ret != -1) {
return ret;
}
// ๋ ๊ฐ๋ ๊ธธ์ค์์ ๋ ํฐ ๊ธธ์ ์ฐพ์ ๋ํจ
ret = map[row][col];
int tmp = -1;
for (int i = col; i <= col + 1; i++) {
tmp = max(tmp, findMaxWay(row + 1, i));
}
ret += tmp;
return ret;
}
int main() {
cin >> N;
memset(cache, -1, sizeof(cache));
for (int i = 0; i < N; i++) {
for (int j = 0; j <= i; j++) {
cin >> map[i][j];
}
}
cout << findMaxWay(0, 0) << endl;
return 0;
}
๋งค๋ฒ ์ ํ์์ ํฐ ๊ฒ์ ์ ํํ๊ธฐ๋ง ํ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ฉด ํฐ ์ค์ฐ์ด๋ค. ๋ ํฐ ๊ฐ์ ๊ณจ๋์ง๋ง ๊ทธ๋ก ์ธํด ๋ค์ ์ ํ์ง๊ฐ ํจ์ฌ ์์์ง ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋น๊ตํด๋ด์ผ ํจ์ ์ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์์ ํ์์ ๋จผ์ ์๊ฐํด ๋ณผ ์ ์๋ค. ํ์ง๋ง ํ์ํ๋ ์์ ํ์์ ์ด ๊ฒฝ์ฐ ๋ถํ์ํ ํจ์ํธ์ถ์ด ๋ง์ ๋นํจ์จ์ ์ด๋ค.
ํ์ ๋์ค, ํ์ํ 8์์ 7์ ๊ณจ๋ผ ์๋ซ์ธต์ผ๋ก ๋ด๋ ค๊ฐ๋ค๊ณ ๊ฐ์ ํ์. 7์์ ๋ด๋ ค๊ฐ ์ ์๋ ์ต๋์ ๊ฒฝ๋ก๋ 5์ด๋ค. ํ์ํ 1์์ 7์ ๊ณจ๋ผ ๋ด๋ ค๊ฐ๋ค๊ณ ํ๋๋ผ๋ 7์์ ๋ด๋ ค๊ฐ ์ ์๋ ์ต๋๊ฒฝ๋ก๋ ์ ํด์ ธ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ตณ์ด 7์์ ํจ์๋ฅผ ํธ์ถํ ํ์ ์์ด 8์์ ํธ์ถํ๋ ๊ฐ์ ์ฌ์ฉํ๋ฉด ํธ์ถ ํ์๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ฐฉ๋ฒ์ ๋์ ๊ณํ๋ฒ์ด๋ผ๊ณ ํ๋ค.
"cache[๋ช๋ฒ์งธ ํ][๋ช๋ฒ์งธ ์ด] = ์ฌ๊ธฐ์ ๋ฐ์ผ๋ก ๋ด๋ ค๊ฐ ์ ์๋ ์ต๋ ๊ฒฝ๋ก์ ํฉ"์ ์ ์ฅํ์ฌ ํด๋น ํ์ด์ ๋์ฐฉํ์ ๊ฒฝ์ฐ, ๋ฐ๋ก ๊ฐ์ ๋ฐํํ๋ค๋ฉด, ํ์ํ 1์์ 7๋ก ๋ด๋ ค๊ฐ์ ๋, 4ํ 2์ด์ด๋ฏ๋ก, cache[3][1]์ ์ฆ์ ๋ฐํํ๋ค.
'๐ > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] 2048(Easy) (๋ฐฑ์ค, 12100) (0) | 2020.11.20 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ฐ๊ตฌ์ (๋ฐฑ์ค, 14502) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] N-Queen (๋ฐฑ์ค, 9663) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] ์นด๋ผ์ถ๋ฐ์ ๋น ๋ฅธ ๊ณฑ์ (Karatsuba) (1) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ๋ถํ ์ ๋ณต(Divide & Conquer) (0) | 2020.07.28 |