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

๐Ÿ–ฅ dev-ruby

[๋ฐฑ์ค€][BOJ] ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ - silver.1 | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | ๋™์ ๊ณ„ํš๋ฒ• (Dynamic progrmming, DP) ๋ณธ๋ฌธ

๋ฐฑ์ค€

[๋ฐฑ์ค€][BOJ] ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ - silver.1 | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | ๋™์ ๊ณ„ํš๋ฒ• (Dynamic progrmming, DP)

ruby_s 2022. 1. 26. 23:59
728x90
๋ฐ˜์‘ํ˜•
SMALL

๋ฌธ์ œ

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

 

11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000) ๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

ํ’€์ด

function solution(N, price){
    let dp = [0, ...price];
    for(let i = 2; i <= N; i++){
        for(let j = 1; j < i; j++)
            dp[i] = Math.max(dp[i], dp[j] + dp[i - j]); // j + (i-j) = i์ด๊ธฐ ๋•Œ๋ฌธ์—, i ๊ฐœ์˜ ์นด๋“œ๋ฅผ ๋ฝ‘๊ธฐ ์œ„ํ•œ ์กฐํ•ฉ ๋ณ„๋กœ j๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.
    }
    return dp[N];
}

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input[0];
const price = [...input[1].split(' ')].map((el) => +el);
console.log(solution(N, price))

์ฒ˜์Œ์— ์ผ์ผ์ด N๊ฐœ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ ์ˆ˜๋ฅผ ๋‹ค ๊ตฌํ–ˆ๋Š”๋ฐ, ์•„๋ฌด๋ฆฌ๋ด๋„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.


์œ„ ์ฝ”๋“œ๋Š” ๊ฐ i๋งˆ๋‹ค i๊ฐœ์”ฉ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ณ„๋กœ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
i = 2์ผ ๋•Œ, j๋Š” 1๋กœ ํ•œ๋ฒˆ ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๊ณ (์กฐ๊ฑด์ด j < i ์ด๊ธฐ ๋•Œ๋ฌธ) ๊ธฐ์กด์˜ ์›๋ž˜ ๊ฐ’( dp[i] ) ๋ณด๋‹ค dp[j] + dp[i-j] ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ ๋œ๋‹ค.


์ž…๋ ฅ ๋ฐฐ์—ด(price)์˜ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์—๋Š” 1์žฅ ์งœ๋ฆฌ ์นด๋“œ์˜ ๊ธˆ์•ก์ด ๋“ค์–ด์žˆ๊ณ , 2๋ฒˆ์งธ์—๋Š” 2์žฅ ์งœ๋ฆฌ ์นด๋“œ์˜ ๊ธˆ์•ก, 3๋ฒˆ์งธ์—๋Š” 3์žฅ ์งœ๋ฆฌ ์นด๋“œ์˜ ๊ธˆ์•ก •••  ์ญ‰์ญ‰ ๋“ค์–ด์žˆ๋Š”๋ฐ,
i = 3 ์ผ๋•Œ๋Š” j๊ฐ€ 1, 2 ๋กœ 2๋ฒˆ ๋ฐ˜๋ณต๋˜๊ณ , dp[j+ dp[i-j] ์—์„œ ๋ณด๋ฉด
" j = 1 : 1๋ฒˆ์งธ + 2(3-1)๋ฒˆ์งธ ๋”ํ•œ ๊ฐ’,
  j = 2 : 2๋ฒˆ์งธ + 1(3-2)๋ฒˆ์งธ ๋”ํ•œ ๊ฐ’ " ์„ ๊ฐ๊ฐ ๊ธฐ์กด ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ๋” ํฐ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.

๊ฒฐ๊ตญ, i ๊ฐœ ๋ฐ˜๋ณต๋งˆ๋‹ค j ๋ฐ˜๋ณต์—์„œ ๋งจ ์ฒ˜์Œ์ธ 1๋ถ€ํ„ฐ ๋†’์€ ์ธ๋ฑ์Šค ๋ฐฉํ–ฅ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฐ’๊ณผ i์—์„œ j์”ฉ ๋นผ์ฃผ๋ฉด์„œ ๋‚ฎ์€ ์ธ๋ฑ์Šค ๋ฐฉํ–ฅ์œผ๋กœ ๋‚ด๋ ค์˜ค๋Š” ๊ฐ’์„ ๋”ํ•˜๋ฉด ๊ทธ ๋‘˜์€ ํ•ฉ์ด i๊ฐœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— "2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ“๊ฐ’, 3๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ“๊ฐ’ ••• N๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ“๊ฐ’" ์ด ์ญ‰์ญ‰ ๊ณ„์‚ฐ๋ผ์„œ dp[N]์—๋Š” N๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ ์ตœ๋Œ“๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

dp[1] : 1๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ ์ตœ๋Œ“๊ฐ’
dp[2] : 2๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ ์ตœ๋Œ“๊ฐ’
••• 
dp[N] : N๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ ์ตœ๋Œ“๊ฐ’
์–ด๋ ต๋‹ค ์–ด๋ ค์›Œ..^^

 

728x90
๋ฐ˜์‘ํ˜•
LIST