๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DP

[๋ฐฑ์ค€]1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ

by syLim___ 2023. 5. 27.
728x90

https://www.acmicpc.net/problem/1149

 

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

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

www.acmicpc.net


์˜ค๋žœ๋งŒ์— dp ๋ฌธ์ œ!

๋ฌธ์ œ ํ’€๋ฉด์„œ dp๋ผ๋Š”๊ฑด ์•Œ์•˜์ง€๋งŒ,,, ์ž๊พธ ์•ˆ ํ’€๋ ค์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

๋‚œ ์™œ ์ด๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ใ… ใ… ใ… 

 

ํ’€์ด

โœ… dp ๋ฐฐ์—ด์—  i๋ฒˆ์งธ ์ง‘์ด ๋นจ๊ฐ„์ƒ‰์ธ๊ฒฝ์šฐ, ์ดˆ๋ก์ƒ‰์ธ ๊ฒฝ์šฐ, ํŒŒ๋ž€์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ์„ ์ €์žฅํ•œ๋‹ค.

 

๐Ÿฅ i๋ฒˆ์งธ ์ง‘์ด ๋นจ๊ฐ„์ƒ‰์ธ ๊ฒฝ์šฐ

 ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ = (i๋ฒˆ์งธ ์ง‘์„ ๋นจ๊ฐ•์œผ๋กœ ์น ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ ) + min( i-1๋ฒˆ์งธ ์ง‘์ด ์ดˆ๋ก์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ , i-1๋ฒˆ์งธ ์ง‘์ด ํŒŒ๋ž€์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ)

 

๐Ÿฅ i๋ฒˆ์งธ ์ง‘์ด ์ดˆ๋ก์ƒ‰์ธ ๊ฒฝ์šฐ

 ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ = (i๋ฒˆ์งธ ์ง‘์„ ์ดˆ๋ก์œผ๋กœ ์น ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ ) + min( i-1๋ฒˆ์งธ ์ง‘์ด ๋นจ๊ฐ•์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ , i-1๋ฒˆ์งธ ์ง‘์ด ํŒŒ๋ž€์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ)

 

๐Ÿฅ i๋ฒˆ์งธ ์ง‘์ด ํŒŒ๋ž€์ƒ‰์ธ ๊ฒฝ์šฐ

 ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ = (i๋ฒˆ์งธ ์ง‘์„ ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ ) + min( i-1๋ฒˆ์งธ ์ง‘์ด ๋นจ๊ฐ•์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ , i-1๋ฒˆ์งธ ์ง‘์ด ์ดˆ๋ก์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋ˆ„์  ๋น„์šฉ)

 

โœ… ์ด๋ ‡๊ฒŒ ์ญ‰์ญ‰ ์ €์žฅํ•œ ๋’ค, n๋ฒˆ์งธ ์ง‘์ด ๋นจ๊ฐ„์ƒ‰, ์ดˆ๋ก์ƒ‰, ํŒŒ๋ž€์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ๋น„์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์ œ์ถœ ์ฝ”๋“œ c++

#include <iostream>

using namespace std;

int dp[3][1000];
int cost[3][1000];

int main(){

  int n; cin >> n;
  for (int i=0; i<n; i++) cin >> cost[0][i] >> cost[1][i] >> cost[2][i];

  dp[0][0] = cost[0][0];
  dp[1][0] = cost[1][0];
  dp[2][0] = cost[2][0];
  
  for(int i=1; i<n; i++){
    dp[0][i] = cost[0][i] + min(dp[1][i-1],dp[2][i-1]);
    dp[1][i] = cost[1][i] + min(dp[0][i-1],dp[2][i-1]);
    dp[2][i] = cost[2][i] + min(dp[0][i-1],dp[1][i-1]);
  }
  
  cout << min(min(dp[0][n-1],dp[1][n-1]),dp[2][n-1]);

  return 0;
}
728x90