Algorithm

๋ฐฑ์ค€ 11049๋ฒˆ : ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ | JAVA

Yunny52 2023. 4. 8. 15:01

๊ณจ๋“œ 3

 

๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ

๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๋ฅผ ์ง์ ‘ ๊ณฑํ•ด๋ณด๋ฉด์„œ, ์ด ๋ฌธ์ œ๋Š” ์ค‘๋ณต๋œ ๊ณ„์‚ฐ์ด ๋งŽ๊ณ  ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ’์„ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๊ธฐ์— ๋ฌด์กฐ๊ฑด 2์ฐจ์› dp๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ตฌํ˜„ ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค.. ์ด๋Ÿฐ์ €๋Ÿฐ ์ƒ๊ฐ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ํŠธ๋ฆฌ๊นŒ์ง€๋„ ๊ทธ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด์„ ๋งˆ์Œ๋Œ€๋กœ ์ˆ˜์ •ํ•˜๋‹ค๋ณด๋‹ˆ ๋งˆ์Œ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ์•ˆ๋‚˜์˜ค๋”๋ผ.. ์•„์ง ์ข€๋” ์—ฐ์Šต์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค!

 


๐Ÿ“Œ ํ’€์ด

๐Ÿ˜ฅ๐Ÿ˜ฅ

์•„์‰ฌ์šด ๋งˆ์Œ์— ์˜ฌ๋ ค๋ณด๋Š” ,, ๋‚˜์˜ ํŠธ๋ฆฌ ,, ์žฌ๊ท€๋กœ ํ’€์–ด๋ณด๊ณ  ์‹ถ์€๋ฐ ์žฌ๋„์ „ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 

 

์•„๋ฌดํŠผ ๊ฒฐ๊ตญ์€ 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ dp๋กœ ํ’€์—ˆ์œผ๋‹ˆ,, ํ•ด๋‹น ํ’€์ด๋ฅผ ์„ค๋ช…ํ•ด๋ณด์ž.

์ด ๋ฌธ์ œ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ dp[i][j]์— ๊ฐ’์„ ์ฑ„์›Œ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ธ๋ฐ,

dp[i][j]๋Š” i๋ฒˆ์งธ ํ–‰๋ ฌ์—์„œ j๋ฒˆ์งธ ํ–‰๋ ฌ๊นŒ์ง€์˜ ํฌ๊ธฐ์˜ ๊ณฑ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋‹ด๋Š”๋‹ค.

 

์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ, matrixSolution() ํ•จ์ˆ˜ ์•ˆ์˜ ์ฒซ๋ฒˆ์งธ for๋ฌธ์—์„œ๋Š” ์ธ์ ‘ํ•œ ๋‘ ๊ฐœ์˜ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ์˜ ๊ณฑ์„ ์ €์žฅํ•ด์ค€๋‹ค.

์ธ์ ‘ํ•œ ๋‘ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ์˜ ๊ณฑ์€ ๊ฐ’์ด ํ•˜๋‚˜์ด๋ฏ€๋กœ ๋ฐ”๋กœ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋ถ„๋ฆฌํ•ด์ค€๋‹ค.

 

๋‘๋ฒˆ์งธ for๋ฌธ์—์„œ๋Š” gap์˜ ์ดˆ๊ธฐ๊ฐ’์„ 2๋กœ ๋‘์–ด, i๋ฒˆ์งธ ํ–‰๋ ฌ๋ถ€ํ„ฐ i+gap๋ฒˆ์งธ ํ–‰๋ ฌ๊นŒ์ง€์˜ ํฌ๊ธฐ์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ,

ํ•ด๋‹น ๋ฒ”์œ„์—์„œ k๋ผ๋Š” ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ„์–ด ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

์–ด๋””์—์„œ ๋‚˜๋ˆ„๋Š”์ง€์— ๋”ฐ๋ผ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.. (๋งค์šฐ ๋‹น์—ฐ)

์ด๋•Œ dp[i][j]์—๋Š” ๊ธฐ์กด dp[i][j] ๊ฐ’๊ณผ dp[i][k] + dp[k+1][j] + matrix[i][0] * matrix[k][1] * matrix[j][1] ์ค‘ ๋” ์ž‘์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

dp[i][k] + dp[k+1][j] + matrix[i][0] * matrix[k][1] * matrix[j][1] 

์œ„์˜ ์‹์„ ๋งŒ๋“ค๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์› ๋Š”๋ฐ,

๋‘ ํ–‰๋ ฌ dp[i][k]์™€ dp[k+1][j]๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ ๊ณ„์‚ฐ๋œ ๊ณฑ์˜ ํ•ฉ๊ณผ ๊ทธ ๋‘ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ์˜ ๊ณฑ์„ ๋”ํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ dp[0][N-1]์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 


๐Ÿ“Œ ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static int N;
    static int[][] matrix;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine()); // ํ–‰๋ ฌ ๊ฐœ์ˆ˜

        // ํ–‰๋ ฌ ์ž…๋ ฅ
        matrix = new int[N][N];
        for(int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            matrix[i][0] = Integer.parseInt(st.nextToken());
            matrix[i][1] = Integer.parseInt(st.nextToken());
        }

        // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
        int result = matrixSolution();
        System.out.println(result);

    }

    public static int matrixSolution() {

        int[][] dp = new int[N][N];

        // ์ธ์ ‘ํ•œ ๋‘ ํ–‰๋ ฌ์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•ด์„œ dp์— ์ €์žฅ
        for(int i = 0; i < N - 1; i++) {
            dp[i][i+1] = matrix[i][0] * matrix[i][1] * matrix[i+1][1];
        }

        // ์ธ์ ‘ํ•˜์ง€ ์•Š์€ ๋‘ ํ–‰๋ ฌ์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•ด์„œ dp์— ์ €์žฅ
        for(int gap = 2; gap < N; gap++) {
            for(int i = 0; gap + i < N; i++) {
                int j = i + gap;
                dp[i][j] = Integer.MAX_VALUE;
                for(int k = i; k < j; k++) {
                    dp[i][j] = Math.min(dp[i][j], dp[i][k] + dp[k+1][j] + matrix[i][0] * matrix[k][1] * matrix[j][1]);
                }
            }
        }

        return dp[0][N-1];

    }

}

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

 

11049๋ฒˆ: ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์€ 231-1 ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋˜ํ•œ, ์ตœ์•…์˜ ์ˆœ์„œ๋กœ ์—ฐ์‚ฐํ•ด๋„ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ 231-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™

www.acmicpc.net