Algorithm๐Ÿฅ‡

9465.์Šคํ‹ฐ์ปค

hae02y 2023. 11. 17. 20:22
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ƒ๊ทผ์ด์˜ ์—ฌ๋™์ƒ ์ƒ๋ƒฅ์ด๋Š” ๋ฌธ๋ฐฉ๊ตฌ์—์„œ ์Šคํ‹ฐ์ปค 2n๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ๋‹ค. ์Šคํ‹ฐ์ปค๋Š” ๊ทธ๋ฆผ (a)์™€ ๊ฐ™์ด 2ํ–‰ n์—ด๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋‹ค. ์ƒ๋ƒฅ์ด๋Š” ์Šคํ‹ฐ์ปค๋ฅผ ์ด์šฉํ•ด ์ฑ…์ƒ์„ ๊พธ๋ฏธ๋ ค๊ณ  ํ•œ๋‹ค.

์ƒ๋ƒฅ์ด๊ฐ€ ๊ตฌ๋งคํ•œ ์Šคํ‹ฐ์ปค์˜ ํ’ˆ์งˆ์€ ๋งค์šฐ ์ข‹์ง€ ์•Š๋‹ค. ์Šคํ‹ฐ์ปค ํ•œ ์žฅ์„ ๋–ผ๋ฉด, ๊ทธ ์Šคํ‹ฐ์ปค์™€ ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ์Šคํ‹ฐ์ปค๋Š” ๋ชจ๋‘ ์ฐข์–ด์ ธ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋—€ ์Šคํ‹ฐ์ปค์˜ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์œ„, ์•„๋ž˜์— ์žˆ๋Š” ์Šคํ‹ฐ์ปค๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

๋ชจ๋“  ์Šคํ‹ฐ์ปค๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๊ฒŒ๋œ ์ƒ๋ƒฅ์ด๋Š” ๊ฐ ์Šคํ‹ฐ์ปค์— ์ ์ˆ˜๋ฅผ ๋งค๊ธฐ๊ณ , ์ ์ˆ˜์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๊ฒŒ ์Šคํ‹ฐ์ปค๋ฅผ ๋–ผ์–ด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค. ๋จผ์ €, ๊ทธ๋ฆผ (b)์™€ ๊ฐ™์ด ๊ฐ ์Šคํ‹ฐ์ปค์— ์ ์ˆ˜๋ฅผ ๋งค๊ฒผ๋‹ค. ์ƒ๋ƒฅ์ด๊ฐ€ ๋—„ ์ˆ˜ ์žˆ๋Š” ์Šคํ‹ฐ์ปค์˜ ์ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ฆ‰, 2n๊ฐœ์˜ ์Šคํ‹ฐ์ปค ์ค‘์—์„œ ์ ์ˆ˜์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋ฉด์„œ ์„œ๋กœ ๋ณ€์„ ๊ณต์œ  ํ•˜์ง€ ์•Š๋Š” ์Šคํ‹ฐ์ปค ์ง‘ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ์— ์ ์ˆ˜๊ฐ€ 50, 50, 100, 60์ธ ์Šคํ‹ฐ์ปค๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ ์ˆ˜๋Š” 260์ด ๋˜๊ณ  ์ด ๊ฒƒ์ด ์ตœ๋Œ€ ์ ์ˆ˜์ด๋‹ค. ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๋‘ ์Šคํ‹ฐ์ปค (100๊ณผ 70)์€ ๋ณ€์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋™์‹œ์— ๋—„ ์ˆ˜ ์—†๋‹ค.

## ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” n (1 โ‰ค n โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ๋‘ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ •์ˆ˜๋Š” ๊ทธ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ์Šคํ‹ฐ์ปค์˜ ์ ์ˆ˜์ด๋‹ค. ์—ฐ์†ํ•˜๋Š” ๋‘ ์ •์ˆ˜ ์‚ฌ์ด์—๋Š” ๋นˆ ์นธ์ด ํ•˜๋‚˜ ์žˆ๋‹ค. ์ ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

## ์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋งˆ๋‹ค, 2n๊ฐœ์˜ ์Šคํ‹ฐ์ปค ์ค‘์—์„œ ๋‘ ๋ณ€์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ์Šคํ‹ฐ์ปค ์ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 256 MB 67707 31720 22316 46.730%

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

ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„


์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ดํŽด๋ณด๋ฉด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

๋ฐฐ์—ด์˜ ์œ„์น˜๋งˆ๋‹ค ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” arr[][] ๋ฐฐ์—ด๊ณผ, ์ด์ „๊ฐ’๊ณผ ํ•ฉํ•ด์„œ ์ตœ๋Œ€๊ฐ’์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ dp[][]๊ฐ€ ์„ ์–ธ๋ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ์Šคํ‹ฐ์ปค๋ฅผ ๋—„๊ฒฝ์šฐ 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

  1. ํ˜„์žฌ ์„ ํƒํ•œ ๊ฐ’์˜ ๋Œ€๊ฐ์„ 
  2. ํ˜„์žฌ ์„ ํƒํ•œ ๊ฐ’์˜ ๋Œ€๊ฐ์„  ๋‹ค์Œ๋ฒˆ
    ์ด๋•Œ ๊ถ๊ธˆํ•œ์ ์ด ์ƒ๊ธด๋‹ค. ๊ทธ๋Ÿผ ์ฒ˜์Œ ํŒŒ๋ž€์ƒ‰ 50๋ถ€ํ„ฐ ๋ดค์„๋•Œ ๋‹ค์Œ์œผ๋กœ 50, 70์ด ์•„๋‹Œ, 10์ด๋‚˜ 100์€ ๋ชป์˜ค๋Š”๊ฑด๊ฐ€? ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 10์˜ ๊ฒฝ์šฐ ํŒŒ๋ž€์ƒ‰ 50๊ณผ ๋‹ฟ์•„์žˆ๋Š” ๋ฉด์ด๋ผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , 100์˜ ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด๋ฌธ์ œ๋Š” ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ฆ‰, 50 - x - 100 ๊ณผ 50 - 50 - 100 ์˜ ๊ฒฝ์šฐ์—์„œ ๋‹น์—ฐํžˆ ํ›„์ž๊ฐ€ ๋” ํฐ๊ฐ’์„ ๊ฐ€์งˆ์ˆ˜์žˆ๊ฒŒ ๋œ๋‹ค.
    ๊ทธ๋Ÿผ ๋ฌธ์ œ๋ฅผ ์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด ๋ณด์ž. ```java dp[0][i] = Math.max(dp[1][i-1], dp[1][i-2]) + cost[0][i]; dp[1][i] = Math.max(dp[0][i-1], dp[0][i-2]) + cost[1][i]; ```

์ด๋ ‡๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ

```java
import java.util.Scanner;

public class ์Šคํ‹ฐ์ปค {

public static void main(String[] args) {  

    Scanner sc = new Scanner(System.in);  

    int t = sc.nextInt(); //ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค  

    for(int k=0; k<t; k++){  

        int n = sc.nextInt(); //2xn๊ฐœ ์˜ ์Šคํ‹ฐ์ปค  

        int[][] arr = new int[2][n];  
        int[][] dp = new int[2][n];  

        for(int i=0; i<2; i++){  
            for(int j=0; j<n; j++){  
                arr[i][j] = sc.nextInt(); //arr ํ• ๋‹น  
            }  
        }  

        dp[0][0] = arr[0][0]; //์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น  
        dp[1][0] = arr[1][0]; //์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น  

        dp[0][1] = arr[1][0] + arr[0][1];  
        dp[1][1] = arr[0][0] + arr[1][1];  

        for(int i=2; i<n; i++){  
            dp[0][i] = Math.max(dp[1][i-1], dp[1][i-2]) + arr[0][i];  
            dp[1][i] = Math.max(dp[0][i-1], dp[0][i-2]) + arr[1][i];  
        }  

        System.out.println(Math.max(dp[0][n-1], dp[1][n-1]));  
        sc.close();  
    }  
}  

}```

๋ฐ˜์‘ํ˜•