BOJ 1149. RGB๊ฑฐ๋ฆฌ
๐โโ๏ธ[Silver I] RGB๊ฑฐ๋ฆฌ - 1149
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 2032 KB, ์๊ฐ: 0 ms
๋ถ๋ฅ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
์ ์ถ ์ผ์
2024๋ 1์ 7์ผ 19:49:50
๋ฌธ์ ์ค๋ช
RGB๊ฑฐ๋ฆฌ์๋ ์ง์ด N๊ฐ ์๋ค. ๊ฑฐ๋ฆฌ๋ ์ ๋ถ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1๋ฒ ์ง๋ถํฐ N๋ฒ ์ง์ด ์์๋๋ก ์๋ค.
์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋ ์ค ํ๋์ ์์ผ๋ก ์น ํด์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, ์๋ ๊ท์น์ ๋ง์กฑํ๋ฉด์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
- 1๋ฒ ์ง์ ์์ 2๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- N๋ฒ ์ง์ ์์ N-1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- i(2 โค i โค N-1)๋ฒ ์ง์ ์์ i-1๋ฒ, i+1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 โค N โค 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ํ์ด
์ฒ์์ ์์ ํ์์ผ๋ก DFS๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ๋ค.
void DFS(int L, int cost, char ch)
{
if (L == n - 1)
{
res = min(res, cost);
return;
}
else
{
if (ch != 'R')
DFS(L + 1, cost + houses[L + 1].r, 'R');
if (ch != 'G')
DFS(L + 1, cost + houses[L + 1].g, 'G');
if (ch != 'B')
DFS(L + 1, cost + houses[L + 1].b, 'B');
}
}
์ด๋ ๊ฒ ๋ก์ง์ ์ง๋๊น ์๊ฐ์ ํ์ด ๋์๋ค.
์ค๋ต ๋ฒ์ ์ ์๋์ ๊ฐ๋ค.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct House
{
int r, g, b;
};
int n, res = 123456789;
vector<House> houses;
void setting()
{
cin >> n;
int r, g, b;
for (int i = 0; i < n; ++i)
{
cin >> r >> g >> b;
houses.push_back({ r, g, b });
}
}
void DFS(int L, int cost, char ch)
{
if (L == n - 1)
{
res = min(res, cost);
return;
}
else
{
if (ch != 'R')
DFS(L + 1, cost + houses[L + 1].r, 'R');
if (ch != 'G')
DFS(L + 1, cost + houses[L + 1].g, 'G');
if (ch != 'B')
DFS(L + 1, cost + houses[L + 1].b, 'B');
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
setting();
DFS(0, houses[0].r, 'R');
DFS(0, houses[0].g, 'G');
DFS(0, houses[0].b, 'B');
cout << res;
return 0;
}
DP๋ฅผ ์ด์ฉํ ํ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int house[1001][3];
int N;
int cost[3];
void solve()
{
house[0][0] = 0;
house[0][1] = 0;
house[0][2] = 0;
cin >> N;
for (int i = 1; i <= N; ++i)
{
cin >> cost[0] >> cost[1] >> cost[2];
house[i][0] = min(house[i - 1][1], house[i - 1][2]) + cost[0];
house[i][1] = min(house[i - 1][0], house[i - 1][2]) + cost[1];
house[i][2] = min(house[i - 1][1], house[i - 1][0]) + cost[2];
}
cout << min(house[N][2], min(house[N][0], house[N][1]));
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
}