๊ธฐ๋ก๋ฐฉ

BOJ_11066 : ํŒŒ์ผ ํ•ฉ์น˜๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_11066 : ํŒŒ์ผ ํ•ฉ์น˜๊ธฐ

Soom_1n 2024. 5. 24. 18:32

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



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

  • T๋ฒˆ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ K๊ฐœ์˜ ์–‘์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ์—ฐ์†๋œ ๋‘ ๊ฐ’์˜ ํ•ฉ์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ ์—ฐ์‚ฐ ๋น„์šฉ์˜ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

  • K๊ฐ€ 500์ด์ง€๋งŒ, Brute Force๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ O(K^3) ์ด์ƒ์ด ๋‚˜์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด DP ๋ฅผ ํ™œ์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค.
  • dp ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ–ˆ๋‹ค.
    • 1๋ฒˆ๋ถ€ํ„ฐ K๋ฒˆ ์ˆซ์ž๋ฅผ ํ•ฉํ–ˆ์„ ๋•Œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋ฏ€๋กœ, dp[0][K-1]๋ฅผ ๊ตฌํ•œ๋‹ค.
      ๋‹ค์‹œ ๋งํ•ด dp ๋ฐฐ์—ด์€ ํ•ด๋‹น ๋ฒ”์œ„์˜ ์ตœ์†Œ์—ฐ์‚ฐ ๋น„์šฉ์„ ์ €์žฅํ•œ๋‹ค.
    • dp ๋ฐฐ์—ด์„ ์ฑ„์›Œ๊ฐˆ ๋•Œ, ์—ฐ์†๋œ ๋‘ ๊ฐ’์„ ๋”ํ•ด๊ฐ€๋ฏ€๋กœ, ์ค‘๊ฐ„์— 1๋ฒˆ ์ž˜๋ผ์„œ ์ขŒ์šฐ ๊ฐ’์„ ๋”ํ–ˆ์„ ๋•Œ์˜ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
      • K๊ฐœ์˜ ์ˆซ์ž ์ค‘ left ~ right ๋ฒ”์œ„๋ฅผ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ ์ตœ์†Œ๊ฐ’ 
      • dp[ left ][ right ] = min(dp[ left ][ right ], dp[ left ][ mid ] + dp[ mid + 1][ right ] + (left๋ถ€ํ„ฐright๊นŒ์ง€์˜ ํ•ฉ) ]
      • ์ ํ™”์‹์„ ํ’€์ดํ•˜๋ฉด, ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋“ค์˜ ์ดํ•ฉ๊ณผ ์ขŒ์šฐ์ธก ๋ฒ”์œ„ ํ•ฉ์„ ๋งŒ๋“ค ๋•Œ ์‹คํ–‰ ๋œ ๋น„์šฉ์„ ๋”ํ•œ ๊ฐ’์˜ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
      • ๋”ฐ๋ผ์„œ ๊ตฌ๊ฐ„ํ•ฉ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ํŠน์ • ๋ฒ”์œ„์˜ ํ•ฉ์„ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

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

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

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

        // Test Case
        int T = Integer.parseInt(br.readLine());
        for (int t = 0; t < T; t++) {

            // Input
            int K = Integer.parseInt(br.readLine());
            int[] files = new int[K]; // ํŒŒ์ผ ํฌ๊ธฐ
            long[] sumArr = new long[K + 1]; // ๋ˆ„์ ํ•ฉ

            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < K; i++) {
                files[i] = Integer.parseInt(st.nextToken());
                sumArr[i + 1] = sumArr[i] + files[i]; // ๋ˆ„์ 
            }

            // Dynamic Programming
            // dp[i][j] : i ~ j ๋ฒ”์œ„๋ฅผ ๋”ํ•  ๋•Œ ๊ณ„์‚ฐ๋œ ์ตœ์†Œ๊ฐ’
            // ์ž˜๋ผ์„œ ์ฐพ๊ธฐ : ์™ผ์ชฝ ๊ณ„์‚ฐ๊ฐ’ + ์˜ค๋ฅธ์ชฝ ๊ณ„์‚ฐ๊ฐ’ + files ์˜ i~j ๋ฒ”์œ„์˜ ํ•ฉ
            long[][] dp = new long[K][K];
            for (int size = 2; size <= K; size++) { // i~j ๋ฒ”์œ„์˜ ํฌ๊ธฐ
                for (int i = 0; i <= K - size; i++) { // ๋ฒ”์œ„ ์™ผ์ชฝ ์ธ๋ฑ์Šค
                    int j = i + size - 1;           // ๋ฒ”์œ„ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค

                    dp[i][j] = Long.MAX_VALUE;

                    for (int l = i; l < j; l++) { // ๋ฒ”์œ„ ์ž˜๋ผ์„œ ํ•ฉ์˜ ์ตœ์†Œ๊ฐ’ ์ฐพ๊ธฐ
                        dp[i][j] = Math.min(dp[i][j], dp[i][l] + dp[l + 1][j] + sumArr[j + 1] - sumArr[i]);
                    }
                }
            }
            sb.append(dp[0][K - 1]).append('\n');
        }
        // Output
        bw.write(sb.toString());
        bw.flush();
    }
}

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

  • ํŠน์ • ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๊ฐ„ํ•ฉ ๋ฐฐ์—ด sumArr๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • sumArr์™€ dp ๋ฐฐ์—ด์˜ ๋ˆ„์ ๊ฐ’์ด ์•„์ฃผ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, longํ˜•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ๋ฒ”์œ„๋ฅผ ์ž˜๋ผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด dp๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • dp ๋ฐฐ์—ด์„ ๊ณ„์‚ฐํ•  ๋•Œ, ๋ฒ”์œ„์˜ ํฌ๊ธฐ๋ฅผ 2๋ถ€ํ„ฐ K๊นŒ์ง€ ํ‚ค์›Œ๊ฐ€๋ฉฐ ์ตœ์†Œ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์ตœ์ข… ๊ฐ’์ธ dp[0][K-1]๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ง์ „์— ํ’€์—ˆ๋˜ BOJ_11049 : ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์˜€๋‹ค.
    • 2์ฐจ์› dp ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ , ์ขŒ์šฐ์ธก์œผ๋กœ ์ž˜๋ผ์„œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ์น˜ํ•œ๋‹ค.
    • ์ฐจ์ด์ ์œผ๋กœ๋Š” ๊ตฌ๊ฐ„ํ•ฉ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ง์ „ ๋ฌธ์ œ ํ’€์ด๊ฐ€ ๋– ์˜ฌ๋ผ์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ์—๋Š” ์‹œ๊ฐ„์ด ๋“ค์ง€ ์•Š์•˜๋Š”๋ฐ, ์˜คํžˆ๋ ค ์ง์ „ ํ’€์ด์™€์˜ ์ฐจ์ด์ ์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 2๋ฒˆ์„ ๊ณ„์† ํ†ต๊ณผ ๋ชปํ–ˆ์—ˆ๋‹ค.
    • ๊ทธ๋ž˜์„œ 1์‹œ๊ฐ„ ์ด์ƒ ๊ณ ๋ฏผํ•˜๊ณ , ์†์œผ๋กœ ๋””๋ฒ„๊น…๋„ ๋งŽ์ด ํ•ด๋ดค์ง€๋งŒ ๊ฒฐ๊ตญ ๋ชป์ฐพ๊ณ  GPT์˜ ์ ํ™”์‹ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.
    • dp๋ฐฐ์—ด์— ๋ˆ„์ ํ•  ๋•Œ, ์ขŒ์šฐ์ธก ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฑด ์ž˜ ํ–ˆ๋Š”๋ฐ ํ˜„์žฌ๊ฐ’์„ ์ขŒ์šฐ์ธก๊ฐ’์˜ ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ x2 ๋ฅผ ํ•ด๋ฒ„๋ ธ๋‹ค.
    • ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ˆ„์ ๋˜์•ผ ํ•˜๋Š” ๊ฐ’์€ ํ˜„์žฌ ๋ฒ”์œ„์˜ ๋“ค์–ด๊ฐ€๋Š” ๋ชจ๋“  ์ˆซ์ž์˜ ์ดํ•ฉ์ด์–ด์„œ ๋ˆ„์ ํ•ฉ์ด ํ•„์š”ํ–ˆ๋‹ค.
    • ๊ณ ๋ฏผ์˜ ํ”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค....

728x90