2023. 8. 23. 19:11ใCoding Test/BOJ
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป๐ปํ์ด ๊ณผ์
DP(Dynamic Programming)๋ก ํ ์ ์์ต๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. (0, 0)๋ถํฐ ์์ํ์ฌ 0ํ๊ณผ 0์ด์ ๋ํด ๋์ ํฉ์ ์ ์ฅํด ๋๊ฐ๋ฉฐ, ์ด๊ธฐํ๋ฅผ ํด์ค๋๋ค.
์์ ์ ๋ ฅ 1๋ฒ์ ์๋ก ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํฉ๋๋ค.
// ์๋ณธ ์
๋ ฅ ๋ฐ์ดํฐ
1 2 3 4
0 0 0 5
9 8 7 6
// ๋์ ํฉ ์ ์ฉ ํ
1 3(2+1) 6(3+3) 10(6+4)
1 (0+1) 0 0 5
10(9+1) 8 7 6
2. 1ํ 1์ด๋ถํฐ ์ด๋ฐฉํฅ์ผ๋ก ํ์ํ๋ฉฐ, {์์ชฝ, ์ผ์ชฝ, ์ผ์ชฝ ์ ๋๊ฐ์ } ์ค์ (์ ์ผ ํฐ ๊ฐ + ํ์ฌ ๊ฐ)์ ๋ํด ์ ์ฅํฉ๋๋ค.
๋ฌธ์ ์์ ์ด๋ ๋ฐฉํฅ์ด {์๋์ชฝ, ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ } ์ด๋ ๊ฒ ์ธ ๊ฐ์์ต๋๋ค. ๋ฐ๋๋ก ์๊ฐํ๋ฉด, {์์ชฝ, ์ผ์ชฝ, ์ผ์ชฝ ์ ๋๊ฐ์ }์๋ ๊ฐ๊ฐ ์ด๋๊น์ง์ ๋์ ํฉ์ด ์กด์ฌํ๋จ ์๋ฏธ์ด๋ฏ๋ก, ์ด์ค์ ๊ฐ์ฅ ํฐ ๋์ ํฉ๊ณผ ํ์ฌ ๊ฐ์ ๋ํด ํ์ฌ ์์น์ ์ ์ฅํ๋ ์์ผ๋ก ๋ฐ๋ณตํ๋ฉด ๋ฉ๋๋ค.
1 3 6 10
1 3{0 + max(3, 1, 1)} 6{0 + max(6, 3, 3)} 15{5 + max(10, 6, 6)}
10 18{8 + max(3, 10, 1)} 25{7 + max(6, 18, 3)} 31{6 + max(15, 25, 6})
์ด๋ฐ ์์ผ๋ก ์ฐพ์๊ฐ๋ฉด, [N-1][M-1]์ ์ต๋๊ฐ์ด ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int FindMaxCandyCount(vector<vector<int>>& maze, int N, int M)
{
// 0ํ ๋์ ํฉ ์ ์ฉ
for (int row = 1; row < N; row++)
maze[row][0] += maze[row - 1][0];
// 0์ด ๋์ ํฉ ์ ์ฉ
for (int col = 1; col < M; col++)
maze[0][col] += maze[0][col - 1];
// {์์ชฝ, ์ผ์ชฝ, ๋๊ฐ์ ์ผ์ชฝ ์} ์ค์ ์ ์ผ ํฐ ์์ ํ์ฌ ์๋ฅผ ๋ํด์ ์ ์ฅ
for (int row = 1; row < N; row++)
for (int col = 1; col < M; col++)
maze[row][col] += max({ maze[row - 1][col], maze[row][col - 1], maze[row - 1][col - 1] });
return maze[N - 1][M - 1];
}
int main()
{
ios::sync_with_stdio(false);
cout.tie(NULL); cin.tie(NULL);
int N, M;
cin >> N >> M;
vector<vector<int>> maze(N, vector<int>(M));
for (int r = 0; r < N; r++)
for (int c = 0; c < M; c++)
cin >> maze[r][c];
int answer = FindMaxCandyCount(maze, N, M);
cout << answer;
return 0;
}
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15686๋ฒ | ์นํจ ๋ฐฐ๋ฌ (C++) (0) | 2023.08.24 |
---|---|
[BOJ] 1309๋ฒ | ๋๋ฌผ์ (C++) (0) | 2023.08.24 |
[BOJ] 1003๋ฒ | ํผ๋ณด๋์น ํจ์ (C++) (0) | 2023.08.21 |
[BOJ] 11726๋ฒ | 2xn ํ์ผ๋ง (C++) (0) | 2023.08.21 |
[BOJ] 9663๋ฒ | N-Queen (C++) (0) | 2023.05.01 |