๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

๋ฐฑ์ค€ 1149๋ฒˆ) RGB๊ฑฐ๋ฆฌ java ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 1149๋ฒˆ) RGB๊ฑฐ๋ฆฌ java

sehaan 2023. 2. 24. 12:00

๋ถ„์„


๊ธฐ๋ณธ์ ์ธ DP ๋ฌธ์ œ์ด๋‹ค. 

ํƒ‘๋‹ค์šด ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹จ์ˆœ ๋น„๊ตํ•ด์„œ dp ๋ฐฐ์—ด์— ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. (๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์ด ์ข€ ๊ท€์ฐฎ์•˜๋‹ค..)

 

์ง‘์ด 2๊ฐœ ์žˆ์„ ๋•Œ, 

๋‘๋ฒˆ์งธ ์ง‘์ด R ์ธ ๊ฒฝ์šฐ์™€ ์ฒซ๋ฒˆ์งธ ์ง‘์ด G,B์ธ ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

๋‘๋ฒˆ์งธ ์ง‘์ด G ์ธ ๊ฒฝ์šฐ์™€ ์ฒซ๋ฒˆ์งธ ์ง‘์ด R,B์ธ ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

๋‘๋ฒˆ์งธ ์ง‘์ด B ์ธ ๊ฒฝ์šฐ์™€ ์ฒซ๋ฒˆ์งธ ์ง‘์ด R,G์ธ ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด DP์— ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ตœ์†Œ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

 

์ง‘์ด 3๊ฐœ ์žˆ์„ ๋•Œ, 

์„ธ๋ฒˆ์งธ ์ง‘์ด R ์ธ ๊ฒฝ์šฐ์™€ ๋‘๋ฒˆ์งธ ์ง‘์ด G,B์ธ(DP๋ฐฐ์—ด์—์„œ) ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

์„ธ๋ฒˆ์งธ ์ง‘์ด G ์ธ ๊ฒฝ์šฐ์™€ ๋‘๋ฒˆ์งธ ์ง‘์ด R,B์ธ(DP๋ฐฐ์—ด์—์„œ) ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

์„ธ๋ฒˆ์งธ ์ง‘์ด B ์ธ ๊ฒฝ์šฐ์™€ ๋‘๋ฒˆ์งธ ์ง‘์ด R,G์ธ(DP๋ฐฐ์—ด์—์„œ) ๊ฒฝ์šฐ ์ค‘ ์ž‘์€ ๊ฐ’์„ DP๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ์ง‘์„ ์น ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ตœ์†Ÿ๊ฐ’์ด ๋งˆ์ง€๋ง‰ ์ง‘ ์ธ๋ฑ์Šค์˜ DP ๋ฐฐ์—ด์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

๋งˆ์ง€๋ง‰ ์ง‘๊นŒ์ง€ ์ด๋ ‡๊ฒŒ ๊ตฌํ•ด์ค€ ๋‹ค์Œ์— DP[์ง‘][R] , DP[์ง‘][G] , DP[์ง‘][B] ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ


import java.util.Scanner;

import static java.lang.Math.*;

public class Main {

    static Integer[][] dp;
    static int[][] value;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();

        dp = new Integer[num+1][3];
        value = new int[num+1][3];

        for(int i=1;i<=num;i++){
            for(int j=0;j<=2;j++){
                value[i][j] = Integer.parseInt(sc.next());
            }
        }
        dp[1][0] = value[1][0];
        dp[1][1] = value[1][1];
        dp[1][2] = value[1][2];
        System.out.println(min(dp(num,0),min(dp(num,1),dp(num,2))));

    }

    static int dp(int num,int seq){

        if(dp[num][seq] == null){
            if(seq == 0){
                dp[num][0] = min(dp(num-1,1) + value[num][seq],dp(num-1,2) + value[num][seq]);
            }
            if(seq == 1){
                dp[num][1] = min(dp(num-1,0) + value[num][seq],dp(num-1,2) + value[num][seq]);
            }
            if(seq == 2){
                dp[num][2] = min(dp(num-1,0) + value[num][seq],dp(num-1,1) + value[num][seq]);
            }
        }

        return dp[num][seq];
    }

}