" (๋ฐฑ์ค/ C++) 1106 - ํธํ "
https://www.acmicpc.net/problem/1106
1106 - ํธํ
์ฒซ์งธ ์ค์ C์ ํํ์ด๊ฐ ํ๋ณดํ ์ ์๋ ๋์์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. C๋ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , N์ 20๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ๋์์์ ํ๋ณดํ ๋ ๋๋ ๋น์ฉ๊ณผ ๊ทธ ๋น์ฉ์ผ๋ก ์ป์ ์ ์๋ ๊ณ ๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ๊ฐ์ 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
์ด ๋ฌธ์ ๋ ๋ ์๊ณผ ๋น์ทํ๋ค.
๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ์ค๋ณต์ผ๋ก ๋ฃ์ ์ ์๋ ์ ? ๋ ์ ๋ฌธ์ ๋ ๋ฌผ๊ฑด ํ๋ ์ฉ ๋ฃ๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํด๋ณด์ด๋ ์์ ์ ๋ ฅ1๋ฒ์ ๋ณด๊ณ DFS๋ฅผ ์ด์ฉํ์ฌ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ดค๋ค.
" C๋ช (12๋ช )์ ํ๋ณดํ๋ฉด์ ์ต์์ ๋น์ฉ์ด ๋ค์ด์ผ ํ๋ค. ์ค๋ณต์ด ๊ฐ๋ฅํ๋ค. "
A: 5๋ช
/ 3๋น์ฉ, B: 1๋ช
/ 1๋น์ฉ
→ C๋ช
(12๋ช
) = AABB, ABBBBBBBB, BBBBBBBBBBBB ์ด 3๊ฐ์ ํด๋ต ์ค ๊ฐ์ฅ ์ ์ ๋น์ฉ์ด ๋ ์กฐํฉ์ด ํด๋ต์ด๋ค.
โป ์ ํ์ ์๊ฐ ํ๋ฆ โป
→ [ C ] ์๋ [ A ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?, [ B ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?
→ [ C - A ] ์๋ [ A ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?, [ B ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?
→ [ C - B ] ์๋ [ A ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?, [ B ]๊ฐ ๋ช๋ช
๋ค์ด๊ฐ๊น?
12๋ช ๋ถํฐ ์์ํด์ DFS๋ก 0๋ช ์ด ๋๊ธฐ๊น์ง ๋ฐ๋ณต๋๋ค. ์๋ ๊ทธ๋ฆผ์ ์๋ ํธ๋ฆฌ ์ฒ๋ผ ์ด์ ์ ํด๋ก ํฐ ํด๋ฅผ ๊ตฌํ ์ ์๋ ๋ฐํ ์ ๋ฐฉ์( Bottom Up )์ผ๋ก ์ ํ์์ ๋ง๋ค์๋ค.
DP[C๋ช ] = ์ต์ ๋น์ฉ ์ด๋ฏ๋ก, [ DFS(7) + cost[A] (3), DFS(11) + cost[B] (1) ] ๋ ์ค ์์ ๊ฐ์ด DFS(12)์ ํด๊ฐ ๋๋ค. cost [ index ]์ index๋ ๊ฐ ๋์์ ์ธ๋ฑ์ค๊ฐ ํด๋น๋๋ฏ๋ก, for๋ฌธ์ ๋๋ ค ๋์ ์ ๋งํผ ์ฆ๊ฐ ์ํค๋ฉฐ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ ์ํค๋ฉด ๋๋ค.
๐ฉ๐ป๐ป ์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
#include<cmath>
using namespace std;
int gN; // - ๋์ ๊ฐ์
int gC; // - C๋ช
๋์ด๊ธฐ ์ํด ํํ์ด๊ฐ ํฌ์ํด์ผํ๋ ๋์ ์ต์๊ฐ์ C
int gCost[101]; // - ๋์ ํ๋ณดํ ๋ ๋๋ ๋น์ฉ
int gCCnt[101];
int DP[1001];
int DFS(int pCustomCnt)
{
if (pCustomCnt <= 0)
{
return 0;
}
if (DP[pCustomCnt] > 0)
{
return DP[pCustomCnt];
}
int mMin = 1000 * 100; // C๋ช
max:1000, ๋น์ฉ max:100
for (int i = 0; i < gN; ++i)
{
// ex) DFS(12[C๋ช
] - 5[๊ณ ๊ฐ ์]) + 3[๋น์ฉ]
// ex) DFS(12[C๋ช
] - 1[๊ณ ๊ฐ ์]) + 1[๋น์ฉ]
int mCost = DFS(pCustomCnt - gCCnt[i]) + gCost[i];
mMin = min(mCost, mMin);
}
DP[pCustomCnt] = mMin;
return DP[pCustomCnt];
}
int main(void)
{
cin >> gC >> gN;
for (int i = 0; i < gN; ++i)
{
cin >> gCost[i] >> gCCnt[i];
}
cout << DFS(gC) << endl;
return 0;
}
'๐ coding test > โฝ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!