๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

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

๋ฌธ์ œ

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ํ‹ฐ์–ด / Dynamic Programming

 

๋งˆ์ง€๋ง‰ ์กฐ๊ฑด์„ ์ž˜๋ชป ์ฝ์–ด์„œ ํ—ค๋งธ๋˜ ๋ฌธ์ œ;;;; ๋ฐ”๋ณธ๊ฐ€

i-1๋ฒˆ์จฐ ์ง‘๊ณผ i+1๋ฒˆ์งธ ์ง‘์˜ ์ƒ‰์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋Š” ๋ง์€ ์—†๋Š”๋ฐ ๋ฉ‹๋Œ€๋กœ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด๋ฒ„๋ ธ๋‹ค ใ…‹ใ…‹

๊ฒฐ๊ตญ ๋ญ”๊ฐ€ ์ด์ƒํ•ด์„œ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด๋ณด๊ณ  ๊นจ๋‹ฌ์Œ..

 

์ด๋Ÿฐ ์‹์œผ๋กœ ์ˆซ์ž ๋ฆฌ์ŠคํŠธ ์ญ‰ ์ฃผ๊ณ  ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’/ ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๋Š” DP๋Š” ์ด์ œ ์ต์ˆ™ํ•ด์ง„ ๊ฒƒ ๊ฐ™๋‹ค!

๋งŽ์ด ํ’€์–ด๋ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์ด์ „์— ์ณค๋˜ ์ฝ”ํ…Œ๋“ค ์ค‘์—์„œ๋„ dp๋ฌธ์ œ๋Š” ๋‹ค ํ•ด๊ฒฐํ–ˆ์Œ

๊ทธ๋ž˜๋„ ์—ฐ์Šตํ•ด์•ผ์ง€...

 

 

#include <iostream>
#include <algorithm>
using namespace std;

int main(){ 
    int n;
    int cost[1001][3] = {0,{0,}};
    cin >> n;
    for (int i = 0; i < n; ++i){
        cin >> cost[i][0] >> cost[i][1] >> cost[i][2];
    }
    for (int i = 0; i<n; ++i) {
        cost[i + 1][0] += min(cost[i][1], cost[i][2]);
        cost[i + 1][1] += min(cost[i][0], cost[i][2]);
        cost[i + 1][2] += min(cost[i][1], cost[i][0]);
    }
    cout << *min_element(begin(cost[n]), end(cost[n]));
    return 0;
}