๊ธฐ๋ก๋ฐฉ

BOJ_11049 : ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ ๋ณธ๋ฌธ

CodingTest/Java

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

Soom_1n 2024. 5. 23. 21:52

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ํ–‰๋ ฌ์„ ๊ณฑ์…ˆ ๊ณ„์‚ฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ–‰๋ ฌ์˜ ๊ณฑ์€ ๊ณฑ์…‰ ์—ฐ์‚ฐ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • dp๋ฐฐ์—ด๋กœ intํ˜• 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด dp[i][j] : i ~ j ๋ฒˆ ํ–‰๋ ฌ ๊ณฑ์˜ ์—ฐ์‚ฐ ์ˆ˜ ์ตœ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • i ~ j ์˜ ํฌ๊ธฐ size๋ฅผ 2 ์ด์ƒ๋ถ€ํ„ฐ N ์ดํ•˜๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉฐ dp ๋ฐฐ์—ด์„ ์ฑ„์›Œ๊ฐ„๋‹ค.
  • i == j (size == 1) ์ผ ๋•Œ, dp[i][j]๋Š” 0์ด๋‹ค.
  • ์ตœ๋Œ€ intํ˜•๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ฌธ์ œ์—์„œ ๋‚˜ํƒ€๋‚ด์ฃผ์—ˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[][] matrix = new int[N][2];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            matrix[i][0] = Integer.parseInt(st.nextToken());
            matrix[i][1] = Integer.parseInt(st.nextToken());
        }

        // Dynamic Programming
        int[][] dp = new int[N][N];

        for (int gap = 2; gap <= N; gap++) { // ์ธ๋ฑ์Šค ์ฐจ์ด ํฌ๊ธฐ
            for (int start = 0; start <= N - gap; start++) { // ์‹œ์ž‘ ์ธ๋ฑ์Šค

                int end = start + gap - 1; // ๋ ์ธ๋ฑ์Šค
                dp[start][end] = Integer.MAX_VALUE;

                for (int i = start; i < end; i++) { // ์ž๋ฅด๊ธฐ ์ธ๋ฑ์Šค
                    dp[start][end] = Math.min(dp[start][end],
                            dp[start][i] + dp[i + 1][end] + matrix[start][0] * matrix[i][1] * matrix[end][1]);
                }
            }
        }

        // Output
        bw.write(Integer.toString(dp[0][N - 1]));
        bw.flush();
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ํ–‰๋ ฌ์˜ ๊ฐ€๋กœ ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ matrix ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
  • N * N ํฌ๊ธฐ์˜ dp ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์‚ฐ์œผ๋กœ ์ฑ„์›Œ๊ฐ„๋‹ค.
    • ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋ ์ธ๋ฑ์Šค์˜ ์ฐจ์ด๋ฅผ 2๋ถ€ํ„ฐ N๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉฐ ๊ณ„์‚ฐํ•œ๋‹ค.
    • dp[์‹œ์ž‘ ์ธ๋ฑ์Šค][๋ ์ธ๋ฑ์Šค] ์— ์ตœ์†Œ๊ฐ’์„ ์ฑ„์›Œ๊ฐ„๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž˜๋ผ ๋ณด๋ฉฐ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ž์„๋•Œ ํ–‰๋ ฌ ๊ณฑ์€ matrix[start][0] * matrix[i][1] * matrix[end][1] ํ˜•ํƒœ๋กœ ๊ณ„์‚ฐ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      (์•ž ํ–‰๋ ฌ์˜ ํ–‰, ์ค‘๊ฐ„ ์ž๋ฅด๊ธฐ ํ–‰๋ ฌ์˜ ์—ด, ๋’ท ํ–‰๋ ฌ์˜ ์—ด ํฌ๊ธฐ์˜ ๊ณฑ)
  • ๋ชจ๋“  dp ๋ฐฐ์—ด์„ ์ฑ„์› ์œผ๋ฉด, ๊ตฌํ•˜๊ณ ์ž ํ–ˆ๋˜ 0 ~ (N-1) ์˜ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ ์ตœ์†Œ๊ฐ’์ธ dp[0][N-1] ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ์˜€๋‹ค. dp์ธ๊ฑด ์–ด๋Š์ •๋„ ์•Œ์•˜์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋‚˜ํƒ€๋‚ด๊ณ ์ž ํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ์ ํ™”์‹ ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•ด๋ณธ ๋’ค ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ ํ™”์‹ ๋ถ€๋ถ„์„ ๋ช…ํ™•ํžˆ ์“ฐ๊ธฐ ์–ด๋ ค์šด๋ฐ, ๋ฒ”์œ„๋ฅผ ์ž˜๋ผ์„œ ์—ฐ์‚ฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๋‘ ์ž˜๋ฆฐ ํ–‰๋ ฌ๊ณฑ์„ ์„œ๋กœ ๊ณฑํ• ๋•Œ์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋งŒ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋‹ˆ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜์–ด์„œ ํ•œ๋ฒˆ์— ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
728x90