๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

2294๋ฒˆ ๋ฌธ์ œ ๋ฉ”๋ชจ

์ฐธ๊ณ : 10์ฃผ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ | ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

 

๋™์ „ n๊ฐ€์ง€๋ฅผ ๋ฌดํ•œํžˆ ์“ธ ์ˆ˜ ์žˆ๋‹ค? == dp๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ๋ˆ„์ 

๋™์ „ n๊ฐ€์ง€๋ฅผ 1๊ฐœ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค? == dp๋ฅผ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋ˆ„์ .

 

0 1 2 3 4 5 6 7 8

1์›์œผ๋กœ ์–˜๋„ค๋“ค์„ ๋งŒ๋“ ๋‹ค.

1 2 3 4 5 6 7 8๊ฐœ๊ฐ€ ํ•„์š”.

2์›์œผ๋กœ ๋งŒ๋“ ๋‹ค.

ํ…Œ์ด๋ธ”๋กœ ํ‘œํ˜„ํ•˜์ž.

 

 

dp 0 1 2 3 4 5 6 7 8
1์› 0 1 2 3 4 5 6 7 8
2์› 0 1 1 2 ...        

๋นจ๊ฐ„ ๊ธ€์”จ๋ถ€ํ„ฐ ๊ฐฑ์‹ ์ด ๋˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ฆ‰, ์ ํ™”์‹์ด min(dp[i], dp[i-2] + 1);์ด๋‹ค.

 

 

๋ฒˆ์™ธ) n๊ฐ€์ง€๋ฅผ 1๊ฐœ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋ฉด?

for (int i = 0; i < n; i++) {
  int tmp = Integer.parseInt(br.readLine());
  for (int j = k; j >= tmp; j--) {
    dp[j] = Math.min(dp[j], dp[j - tmp] + 1);
  }
}

 

1, 2, 5๋กœ 5์›์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด ํ…Œ์ด๋ธ”์ด ๋‹ค์Œ์ฒ˜๋Ÿผ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

dp 0 1 2 3 4 5
1์› 0 1 inf inf inf inf
2์› 0 1 1 2 inf inf
5์› 0 1 1 2 inf 1

 

ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ๋ชจ๋‘ 1๊ฐœ๋งŒ ์‚ฌ์šฉํ•ด์„œ k์›์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š”๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ, ์™œ ์ด๋ ‡๊ฒŒ ๋˜๋Š”๊ฑด์ง€๋Š” ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.