๐•ƒ๐•ฆ๐•„๐•š๐•ฃ

ใ€ŒโŒจ๏ธแด„sใ€PS/๋ฐฑ์ค€_๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ[DP]

[Baekjoon/๋ฐฑ์ค€][1149][C/C++] RGB๊ฑฐ๋ฆฌ

by ๋ฃจ๋ฐ€๐•ƒ๐•ฆ๐•„๐•š๐•ฃ2023. 2. 19.
728x90
๋ฐ˜์‘ํ˜•
ใ€Ž๋ชฉ์ฐจใ€
0. ๊ฐœ์š”

1. ๋ฌธ์ œ
2. ํ’€์ด
3. ์ฝ”๋“œ

0. ๊ฐœ์š”

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ๋ฌธ์ œ. 17404๋ฒˆ RGB๊ฑฐ๋ฆฌ2 ๋ฌธ์ œ์™€ ์„ธํŠธ๋ฌธ์ œ์ด๋‹ค.

RGB๊ฑฐ๋ฆฌ1(1149๋ฒˆ)๋ฌธ์ œ๋Š” ์„ ํ˜•๋ฐฐ์น˜๋ฌธ์ œ๋ผ ํ•  ์ˆ˜ ์žˆ๊ณ , RGB๊ฑฐ๋ฆฌ2(17404๋ฒˆ)๋ฌธ์ œ๋Š” ์›ํ˜•๋ฐฐ์น˜๋ฌธ์ œ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๋ฌธ์ œ

 

1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜

www.acmicpc.net

[๋ฌธ์ œ]

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๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

[์ถœ๋ ฅ]

์ฒซ์งธ ์ค„์— ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

[์˜ˆ์ œ ์ž…๋ ฅ 1]

3
26 40 83
49 60 57
13 89 99

[์˜ˆ์ œ ์ถœ๋ ฅ 1]

96

[์˜ˆ์ œ ์ž…๋ ฅ 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]

102

[์˜ˆ์ œ ์ž…๋ ฅ 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. ํ’€์ด

Bottom Up(์ƒํ–ฅ์‹) ๋ฐฉ์‹์„ ํ†ตํ•ด ํ’€์—ˆ๋‹ค.

table ๋ฐฐ์—ด์— ๊ฐฑ์‹ ๋˜๋Š” ๊ฐ’์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

๋งจ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๊ฐฑ์‹ ๋˜๋ฉด, ๋ฐฐ์—ด ์ œ์ผ ์•„๋ž˜์ชฝ์˜ 3๊ฐœ์˜ ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

[Baekjoon/๋ฐฑ์ค€][1149][C/C++] RGB๊ฑฐ๋ฆฌ

3. ์ฝ”๋“œ

#pragma warning(disable:4996)
#include <stdio.h>

#define min(a,b) (((a) < (b)) ? (a) : (b))

int table[1001][3] = {}; //R=0, G=1, B=2

int main(int argc, char* argv[]) {
	/* Input */
	int N; scanf("%d", &N);
	for (int i = 1; i <= N; i++)
		scanf("%d %d %d", &table[i][0], &table[i][1], &table[i][2]);

	/* DP */
	for (int i = 2; i <= N; i++) {
		table[i][0] += min(table[i - 1][1], table[i - 1][2]);
		table[i][1] += min(table[i - 1][0], table[i - 1][2]);
		table[i][2] += min(table[i - 1][0], table[i - 1][1]);
	}

	/* Output */
	printf("%d", min(table[N][0], min(table[N][1], table[N][2])));

	/* End */
	return 0;
}
728x90
๋ฐ˜์‘ํ˜•