์‹ค๋ฒ„1 : ๋™์ ๊ณ„ํš๋ฒ• ๋ฌธ์ œ์ด๋‹ค.

์ƒ๊ฐ

๋™์  ๊ณ„ํš๋ฒ•ํ•˜๋ฉด ์œ ๋ช…ํ•œ ๋ฌธ์ œ์ด๋‹ค. ๋‚˜๋Š” ๋™์  ๊ณ„ํš๋ฒ•์„ ํ’€ ๋•Œ ๋ณดํ†ต ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

  1. ์ƒํƒœ์— ๋Œ€ํ•œ ์ •์˜์™€ ์ ํ™”์‹์„ ์ง๊ด€์œผ๋กœ ๋•Œ๋ฆฐ๋‹ค. (๊ฐ..)
  2. ์ˆœ์ฐจ์ ์œผ๋กœ ์™„์ „ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ทธ๋ ค๋ณธ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์ž˜ ์•ˆ๋ณด์ด๋ฉด 2๋ฒˆ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

|1|2| |:|:| |R|| |G|R| |B|| |R|| |G|G| |B|| |R|| |G|B| |B||

1๋ฒˆ ์ง‘์—์„œ 2๋ฒˆ ์ง‘์œผ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ, 2๋ฒˆ ์ง‘์˜ ์„ ํƒ์— ๋”ฐ๋ผ 1๋ฒˆ์ง‘์˜ ์„ ํƒ์€ 2๋ฒˆ ์ง‘์—์„œ ์„ ํƒํ•œ ์ƒ‰์„ ์ œ์™ธํ•œ ๋‘๊ฐ€์ง€ ์ƒ‰์œผ๋กœ ์ •ํ•ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ Dp์˜ ์ •์˜ ๋ฐฉ๋ฒ•์˜ ํŠน์ง•์ด ๋“œ๋Ÿฌ๋‚˜๋Š”๋ฐ, ์‚ฌ์‹ค ๋‚˜๋Š” ์ฒ˜์Œ ์ƒ๊ฐํ•  ๋•Œ, 1๋ฒˆ์ด ์„ ํƒ์„ ํ•˜๊ณ , 2๋ฒˆ์ด ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š” ์ง€๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ๊ฒฝ์šฐ ๊ต‰์žฅํžˆ ๊ท€์ฐฎ๊ณ  ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. dp์˜ ์ •์˜๋Š” ํ•ด๋‹น ์œ„์น˜๊นŒ์ง€์— ์–ด๋–ค ์˜๋ฏธ๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•  ๋•Œ ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜์—ด์—์„œ ์ผ๋ฐ˜ํ•ญ์˜ ์ •์˜์™€ ๋น„์Šทํ•˜๋‹ค.

์ •์˜

dp[N][color] = N๋ฒˆ ์ง‘์— color๋ฅผ ์น ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ตœ์†Œ ๊ฐ’

color ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ ์ด์œ ๋Š”, ํ•ด๋‹น ์ง‘์— ์–ด๋–ค ์ƒ‰์„ ์น ํ•˜๋ƒ์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ์„ ๋งˆ์ง€๋ง‰์— ์ตœ์ข…์ ์œผ๋กœ ๋น„๊ตํ•ด์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.

์ ํ™”์‹

dp[N][color1] = min(dp[N-1][color2], dp[N-1][color3]) + cost[i][color1]

color2, color3๋Š” color1์ด์™ธ์˜ ๋‘ ์ƒ‰์„ ์˜๋ฏธํ•œ๋‹ค.

Code

#include <iostream>
#include <algorithm>
using namespace std;
int N = 0;
int cost[1001][3];
int dp[1001][3] = {0};
 
int main(){
    cin >> N;
    for (int i = 1; i <= N; i++)
        for (int j = 0; j < 3; j++)
            cin >> cost[i][j];
    // ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…
    for (int i = 0; i < 3; i++) dp[1][i] = cost[1][i];
    // dp
    for (int i = 2; i <= N; i++)
        for (int j = 0; j < 3; j++)
            dp[i][j] = min(dp[i-1][(j+1)%3], dp[i-1][(j+2)%3])+cost[i][j];
    // ์ตœ์ข…์ ์ธ ์ตœ์†Œ๊ฐ’
    cout << *min_element(&dp[N][0], &dp[N][3]) << '\n';
    return 0;
}

Reference