Home Week2 - Simple DP
Post
Cancel

Week2 - Simple DP

๐Ÿ“ ๋ฌธ์ œ ๋ชฉ๋ก



1. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 2

์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฏ€๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
๋ฐ”๋กœ ํ’€๊ธด ํ–ˆ๋Š”๋ฐ ๋ฒ”์œ„โ€ฆ์ด๋Ÿฐ ์‹ค์ˆ˜๋Š” ํ•˜์ง€ ๋ง์ž!
์ฐธ ๊ธ€ ์“ฐ๋‹ˆ๊นŒ ์ƒ๊ฐ๋‚ฌ๋Š”๋ฐ ๊ตณ์ด n๊ฐœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ํ•„์š” ์—†์ด 3๊ฐœ๋งŒ์œผ๋กœ ๊ฐฑ์‹ ํ•ด๊ฐ€๋ฉฐ ํ’€์–ด๋„ ๋œ๋‹ค.

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<vector>

using namespace std;

int main() {
	int n;
	vector<long long> fib;
	cin >> n;

	fib.assign(n+1, 0);
	fib[1] = 1;

	for (int i = 2; i <= n; i++) {
		fib[i] = fib[i - 1] + fib[i - 2];
	}

	cout << fib[n];
}


2. 2ร—n ํƒ€์ผ๋ง 2

์ด ๋ฌธ์ œ ํ•œ 5๋ฒˆ์€ ํ’€์ง€ ์•Š์•˜์„๊นŒ?ใ…‹ใ…‹๊ทธ๋ž˜์„œ ํ’€์ด๋Š” ๋ฐ”๋กœ ๋– ์˜ฌ๋ž๋‹ค.
2ร—n ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜ = 2ร—(n-1) ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ์ˆ˜ + 2ร—(n-2) ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ์ˆ˜*2 ์ด๋‹ค.
์™œ๋ƒ๋ฉด 2ร—(n-1) ์ง์‚ฌ๊ฐํ˜•์—์„œ โ€˜1ร—2์งœ๋ฆฌ ํ•˜๋‚˜โ€™๋ฅผ ์ฑ„์šด ๊ฒƒ์ด๊ฑฐ๋‚˜
2ร—(n-1) ์ง์‚ฌ๊ฐํ˜•์—์„œ โ€˜2ร—1์งœ๋ฆฌ ๋‘๊ฐœโ€™ or โ€˜2ร—2์งœ๋ฆฌ ํ•˜๋‚˜โ€™๋ฅผ ์ฑ„์šด๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ.
๊ทธ๋ฆฌ๊ณ  base case๋ฅผ n=0์ผ๋•Œ 1, n=1์ผ๋•Œ 1๋กœ ์„ค์ •ํ•ด์คฌ๋Š”๋ฐ, ๋ญ ๊ฒฐ๊ณผ๊ฐ’์€ ๊ฐ™์ง€๋งŒ โ€˜2ร—0 ์ง์‚ฌ๊ฐํ˜•โ€™์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ํ˜ผ๋™์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ n=1์„ 1๋กœ, n=2๋ฅผ 3์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ์˜ˆ์ „์—โ€ฆ์ฒ˜์Œ์— ํ’€ ๋•Œ๋Š” 2ร—2์นธ์„ 1ร—2์งœ๋ฆฌ ๋‘๊ฐœ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ• ๋•Œ๋ฌธ์ด์—ˆ๋Š”์ง€ ์•„๋ฌดํŠผ ์‚ฝ์งˆ์„ ์ข€ ํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>

using namespace std;

int main() {
	int n;
	int cnt[1001] = { 0 };
	cin >> n;

	cnt[0] = 1;
	cnt[1] = 1;

	for (int i = 2; i <= n; i++) {
		cnt[i] = (cnt[i - 1] + cnt[i - 2] * 2) % 10007;
	}

	cout << cnt[n];
}


3. RGB๊ฑฐ๋ฆฌ

๋ณด์ž๋งˆ์ž ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๋•…๋”ฐ๋จน๊ธฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค. ๊ฑฐ์˜ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ธ๋ฐโ€ฆ ๋‹น์‹œ์— ๋จธ๋ฆฌ๋ฅผ ์‹ธ๋งค๊ณ  ํ’€์—ˆ์ง€๋งŒ ๋„์ €ํžˆ ์ƒ๊ฐ์ด ์•ˆ ๋‚˜์„œ ๊ฒฐ๊ตญ ํ’€์ด๋ฅผ ๋ดค๋”๋žฌ๋‹ค.
์‚ฌ์‹ค์€ ์ด๋ฒˆ์—๋„ ๋ฐ”๋กœ ๋– ์˜ฌ๋ฆฌ์ง„ ๋ชปํ–ˆ๊ณ ..ใ…Ž ๋‚ด๊ฐ€ ์™œ ์–ด๋ ค์›Œํ–ˆ์—ˆ๋Š”์ง€ ๋˜์งš์–ด๋ณด๋‹ค๊ฐ€ ํ’€์ด๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค.
์ฒ˜์Œ์— ํ’€ ๋•Œ ์–ด๋ ค์›€์„ ๋Š๊ผˆ๋˜ ์ด์œ ๊ฐ€ โ€˜n๋ฒˆ์งธ ์ค„์—์„œ ์–ด๋–ค ์ธ๋ฑ์Šค๋ฅผ ์„ ํƒํ–ˆ๋Š๋ƒ์— ๋”ฐ๋ผ ๊ทธ ์ด์ „ ์„ ํƒ์ด ๋ฐ”๋€”์ˆ˜๋„ ์žˆ๋‹ค(์˜ํ–ฅ์„ ์ค€๋‹ค)โ€™ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ,
์ด์ „ ์ค„์—์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ค‘ ๋ฒ ์ŠคํŠธ ๊ฐ’์„ ๊ตฌํ•ด์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค๊ฐ’์— ๋ˆ„์ ํ•ด๋†“์œผ๋ฉด, ์–ด์ฐจํ”ผ ์ธ๋ฑ์Šค๊ฐ€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋” ์ด์ƒ ์ด์ „์„ ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋œ๋‹ค. (์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ์ข€ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค๐Ÿฅฒ)
์•„๋ฌดํŠผ ๊ทธ๋ ‡๊ฒŒ ํ’€์–ด์„œ ํ†ต๊ณผ๋Š” ํ–ˆ๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ์•„๋ฌด๋ž˜๋„ ๋ณด๊ธฐ ์‰ฝ์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ์Šคํ„ฐ๋””์› ๋ถ„๋“ค์ด ์ง  ๋ฐฉ์‹์œผ๋กœ ๊ณ ์ณค๋‹ค.

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>

using namespace std;

int min(int a, int b) {
	return ((a < b) ? a : b);
}

int main() {
	int n;
	int stacked_cost[3] = { 0 };
	cin >> n;

	for (int i = 0; i < n; i++) {
		int cur_cost[3];

		for (int j = 0; j < 3; j++) {
			cin >> cur_cost[j];

			int prev_min_cost = INT32_MAX;
			for (int k = 0; k < 3; k++) {
				if ((j != k) && (prev_min_cost > stacked_cost[k])) prev_min_cost = stacked_cost[k];
			}

			cur_cost[j] += prev_min_cost;
		}

		for (int j = 0; j < 3; j++) {
			stacked_cost[j] = cur_cost[j];
		}
	}

	cout << min(stacked_cost[0], min(stacked_cost[1], stacked_cost[2]));
}

์ฝ”๋“œ #2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>

using namespace std;

int min(int a, int b) {
	return (a < b) ? a : b;
}

int main() {
	int n;
	int cost[1001][3];
	cin >> n;

	for (int i = 0; i < 3; i++) {
		cin >> cost[1][i];
	}

	for (int i = 2; i <= n; i++) {
		for (int j = 0; j < 3; j++) {
			cin >> cost[i][j];
		}
		cost[i][0] += min(cost[i - 1][1], cost[i - 1][2]);
		cost[i][1] += min(cost[i - 1][0], cost[i - 1][2]);
		cost[i][2] += min(cost[i - 1][0], cost[i - 1][1]);
	}

	cout << min(cost[n][0], min(cost[n][1], cost[n][2]));
}


4. RGB๊ฑฐ๋ฆฌ (ํ†ต๊ณผ X)

ํ•œ์ฐธ์„ ์ƒ๊ฐํ–ˆ์œผ๋‚˜โ€ฆ ํ’€์ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค.
์œ„ ๋ฌธ์ œ์—์„œ ์ฒซ์ค„์„ ์ œ์™ธํ•˜๊ณ  ๋น„์šฉ์„ ๊ตฌํ•œ ๋‹ค์Œ ๋‘๋ฒˆ์งธ ์ค„์— ์„ ํƒํ•œ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰์ค„ ์„ ํƒ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธ์‹œํ‚ค๊ณ  ๋น„๊ตํ•˜๋Š”โ€ฆ ๋ญ ๊ทธ๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๊ณ  ์งฐ๋Š”๋ฐ. ์•„๋ฌด๋ž˜๋„ ์„์—ฐ์ฐฎ๊ธฐ๋Š” ํ–ˆ๋‹ค.
๊ทผ๋ฐ ์˜ˆ์ œ๋ž‘ ์งˆ๋ฌธ๊ธ€์— ์˜ฌ๋ผ์˜จ ๋ฐ˜๋ก€ ๋‘์–ด ๊ฐœ๊ฐ€ ๋‹ค ์ž˜ ๋‚˜์™€์„œ, ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„ ์›ฌ๋งŒํ•˜๋ฉด ํ’€์ด ๋ณด์ง€ ๋ง๊ณ  ๊ณ ์ณ๋ณด์ž ํ–ˆ๋Š”๋ฐ
๊ณ ์น˜๊ณ  ์ œ์ถœํ•ด๋„ ๊ณ„์† ์‹คํŒจ๊ฐ€ ๋œจ๋‹ˆ ๋‚ด๊ฐ€ ํ™•์‹คํžˆ ๋†“์นœ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ฒฐ๊ตญ ํ’€์ด๋ฅผ ๋ดค๋‹ค. ์•„๋‹ˆ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด.ใ…‹ใ…‹ใ…‹ OTL
ํ•œ๋‹ฌ ๋’ค์— ๋‹ค์‹œ ํ’€์–ด๋ณด๊ณ  ํ’€์ด ์ž‘์„ฑํ•ด์•ผ๊ฒ ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Week1 - Greedy Algorithm

[Unity Graphics Study] 1. Particle System

Comments powered by Disqus.