ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
๋์ ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) ๋ฌธ์ . 1149๋ฒ RGB๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ์ธํธ๋ฌธ์ ์ด๋ค.
RGB๊ฑฐ๋ฆฌ1(1149๋ฒ)๋ฌธ์ ๋ ์ ํ๋ฐฐ์น๋ฌธ์ ๋ผ ํ ์ ์๊ณ , RGB๊ฑฐ๋ฆฌ2(17404๋ฒ)๋ฌธ์ ๋ ์ํ๋ฐฐ์น๋ฌธ์ ๋ผ ํ ์ ์๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/17404
[๋ฌธ์ ]
RGB๊ฑฐ๋ฆฌ์๋ ์ง์ด N๊ฐ ์๋ค. ๊ฑฐ๋ฆฌ๋ ์ ๋ถ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1๋ฒ ์ง๋ถํฐ N๋ฒ ์ง์ด ์์๋๋ก ์๋ค.
์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋ ์ค ํ๋์ ์์ผ๋ก ์น ํด์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, ์๋ ๊ท์น์ ๋ง์กฑํ๋ฉด์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
- 1๋ฒ ์ง์ ์์ 2๋ฒ, N๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- N๋ฒ ์ง์ ์์ N-1๋ฒ, 1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- i(2 ≤ i ≤ N-1)๋ฒ ์ง์ ์์ i-1, i+1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
[์์ ์ ๋ ฅ 1]
3
26 40 83
49 60 57
13 89 99
[์์ ์ถ๋ ฅ 1]
110
[์์ ์ ๋ ฅ 2]
3
1 100 100
100 1 100
100 100 1
[์์ ์ถ๋ ฅ 2]
3
[์์ ์ ๋ ฅ 3]
3
1 100 100
100 100 100
1 100 100
[์์ ์ถ๋ ฅ 3]
201
[์์ ์ ๋ ฅ 4]
6
30 19 5
64 77 64
15 19 97
4 71 57
90 86 84
93 32 91
[์์ ์ถ๋ ฅ 4]
208
[์์ ์ ๋ ฅ 5]
8
71 39 44
32 83 55
51 37 63
89 29 100
83 58 11
65 13 15
47 25 29
60 66 19
[์์ ์ถ๋ ฅ 5]
253
2. ํ์ด
๋ฐฑ์ค 1149๋ฒ(RGB๊ฑฐ๋ฆฌ)์ ์์ฉ๋ฒ์ ์ด๋ค. 1149๋ฒ ๋ฌธ์ ๋ฅผ ํ๊ณ ์ค๋ฉด ๋ฌธ์ ํ์ด๊ฐ ์ข ๋ ์์ํ๋ค.
๊ธฐ์กด 1149๋ฒ ๋ฌธ์ ์ ๋ฌ๋ฆฌ ํ๋์ ์กฐ๊ฑด์ด ๋ ์ถ๊ฐ๋์๋ค. ์ฒ์๊ณผ ๋ง์ง๋ง์ง์ ์์ด ๋ฌ๋ผ์ผ ํ๋ค๋ ์ ์ด๋ค. ์ด ์กฐ๊ฑด์ผ๋ก ์ธํ์ฌ ์ฒซ๋ฒ์งธ ์ง๊ณผ ๋ง์ง๋ง ์ง์ด ์๋ก ์ด์์ด ๋์ด, 1149๋ฒ(RGB๊ฑฐ๋ฆฌ) ๋ฌธ์ ๋ ์ ํ๋ฐฐ์น, 17404๋ฒ(RGB๊ฑฐ๋ฆฌ 2)๋ฌธ์ ๋ ์ํ๋ฐฐ์น ๋ฌธ์ ๋ผ ํ๋จํ ์ ์๊ฒ ๋์๋ค.
์ ํ ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์์น ์ ์์ํด์ผ ํ๋ ์์์ ์ด ๋ช ํํ๋ค. ๋ํ, ์ฒ์๊ณผ ๋ง์ง๋ง ์ง ์ฌ์ด์ ์ ์ค๋ณต์ ๊ณ ๋ คํ์ง ์์๋ ๋์๊ธฐ ๋๋ฌธ์, ํ๋ฒ์ DP๊ณผ์ ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
์ํ ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์์น ์ ์์ํด์ผ ํ๋ ์์์ ์ด ๋ช ํํ์ง ์๋ค. ๋ฐ๋ผ์, ์ด๋ค ์ง ํ๋๋ฅผ ์์๋ก ์์์ ์ผ๋ก ์ก์ ๋ค ์์ ์น ํด๋๊ฐ์ผ ํ๋ค. ๋ํ, ์ฒ์๊ณผ ๋ง์ง๋ง ์ง์ ์์์ด ๋ฌ๋ผ์ผ ํ๋ฏ๋ก, ์ฒ์ ์์์ ์ ์์ R, G, B์ค ํ๋๋ก ๊ณ ์ ์์ผ๋๊ณ 1149๋ฒ(RGB๊ฑฐ๋ฆฌ) ๋ฌธ์ ๋ ์ฌ์ฉํ DP๊ณผ์ ์ ์ด์ฉํด์ผ ํ๋ค. ์ฒ์ ์ง์ด R, G, B์ผ ๋, ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
X. 1๋ฒ์ง์ด R์ด๊ณ ๋ง์ง๋ง์ง์ด R์ผ๋ ์ต์๋น์ฉ
1. 1๋ฒ์ง์ด R์ด๊ณ ๋ง์ง๋ง์ง์ด G์ผ๋ ์ต์๋น์ฉ
2. 1๋ฒ์ง์ด R์ด๊ณ ๋ง์ง๋ง์ง์ด B์ผ๋ ์ต์๋น์ฉ
3. 1๋ฒ์ง์ด G์ด๊ณ ๋ง์ง๋ง์ง์ด R์ผ๋ ์ต์๋น์ฉ
X. 1๋ฒ์ง์ด G์ด๊ณ ๋ง์ง๋ง์ง์ด G์ผ๋ ์ต์๋น์ฉ
4. 1๋ฒ์ง์ด G์ด๊ณ ๋ง์ง๋ง์ง์ด B์ผ๋ ์ต์๋น์ฉ
5. 1๋ฒ์ง์ด B์ด๊ณ ๋ง์ง๋ง์ง์ด R์ผ๋ ์ต์๋น์ฉ
6. 1๋ฒ์ง์ด B์ด๊ณ ๋ง์ง๋ง์ง์ด G์ผ๋ ์ต์๋น์ฉ
X. 1๋ฒ์ง์ด B์ด๊ณ ๋ง์ง๋ง์ง์ด B์ผ๋ ์ต์๋น์ฉ
์ ๊ฒฝ์ฐ์ ์ ์ค์์, 1๋ฒ์ง๊ณผ ๋ง์ง๋ง์ง์ ์์์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ํด ์ค๋ต์ด ๋๋ฏ๋ก, ๊ฒฝ์ฐ์ ์์์ ์ ์ธํ์๋ค.
DP๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. (Bottom Up ๋ฐฉ์์ผ๋ก DP๋ฅผ ์งํํ์๋ค.)
3. ์ฝ๋
/* ์ข ๋ ๊ฐ๋จํ ํ์ด : 0๋ฒ idx ๊ธฐ๋ณธ์ธํ
. 1๋ฒ idx๋ถํฐ DP ๊ณ์ฐ ์์. */
#pragma warning(disable:4996)
#include <cstdio>
#include <climits>
#include <algorithm>
#define INF (INT_MAX / 2)
using namespace std;
int table_src[1000][3] = {}; //R=0, G=1, B=2
int main(int argc, char* argv[]) {
/* Input */
int N; scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d %d %d", &table_src[i][0], &table_src[i][1], &table_src[i][2]);
/* DP */
int ans = INF;
for (int i = 0; i < 3; i++) {
/* Init */
int table_dp[1000][3] = {};
/* i๋ฒ ์ง์ ์ง์ ๋ ์ ์ด์ธ์ ์์ MAX๋ก ์ง์ ํ์ฌ dpํ ๋ ์ ํ๋์ง ์๋๋ก ํจ. */
table_dp[0][(i) % 3] = table_src[0][(i) % 3];
table_dp[0][(i + 1) % 3] = INF;
table_dp[0][(i + 2) % 3] = INF;
/* DP */
for (int j = 1; j < N; j++) {
table_dp[j][0] = table_src[j][0] + min(table_dp[j - 1][1], table_dp[j - 1][2]);
table_dp[j][1] = table_src[j][1] + min(table_dp[j - 1][0], table_dp[j - 1][2]);
table_dp[j][2] = table_src[j][2] + min(table_dp[j - 1][0], table_dp[j - 1][1]);
}
/* ์ต์๊ฐ ์ ํ */
ans = min({ ans, table_dp[N - 1][(i + 1) % 3], table_dp[N - 1][(i + 2) % 3] });
}
/* Output */
printf("%d", ans);
/* End */
return 0;
}
/* ์ข ๋ ๋ณต์กํ ํ์ด : 0, 1๋ฒ idx ๊ธฐ๋ณธ์ธํ
. 2๋ฒ idx๋ถํฐ DP ๊ณ์ฐ ์์. */
#pragma warning(disable:4996)
#include <cstdio>
#include <climits>
#include <algorithm>
using namespace std;
int table_src[1000][3] = {}; //R=0, G=1, B=2
int main(int argc, char* argv[]) {
/* Input */
int N; scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d %d %d", &table_src[i][0], &table_src[i][1], &table_src[i][2]);
/* DP */
int ans = INT_MAX;
for (int i = 0; i < 3; i++) {
int table_dp[1000][3] = { table_src[0][0], table_src[0][1], table_src[0][2] };
table_dp[1][(i) % 3] = INT_MAX;
table_dp[1][(i + 1) % 3] = table_dp[0][(i) % 3] + table_src[1][(i + 1) % 3];
table_dp[1][(i + 2) % 3] = table_dp[0][(i) % 3] + table_src[1][(i + 2) % 3];
for (int j = 2; j < N; j++) {
table_dp[j][0] = table_src[j][0] + min(table_dp[j - 1][1], table_dp[j - 1][2]);
table_dp[j][1] = table_src[j][1] + min(table_dp[j - 1][0], table_dp[j - 1][2]);
table_dp[j][2] = table_src[j][2] + min(table_dp[j - 1][0], table_dp[j - 1][1]);
}
ans = min({ ans, table_dp[N - 1][(i + 1) % 3], table_dp[N - 1][(i + 2) % 3] });
}
/* Output */
printf("%d", ans);
/* End */
return 0;
}
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_๋์ ํ๋ก๊ทธ๋๋ฐ[DP]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][1149][C/C++] RGB๊ฑฐ๋ฆฌ (0) | 2023.02.19 |
---|