220505_w3_DP - Sunny-W-Park/elice-sw2-algorithms GitHub Wiki

๋ฐ•์„ ์šฐ - #14501 ํ‡ด์‚ฌ

๋ฌธ์ œ ํ•ด์„

  • N: ์ƒ๋‹ด ๊ฐ€๋Šฅํ•œ ๋‚จ์€ ์ผ ์ˆ˜(N+1์ผ์— ํ‡ด์‚ฌ)
  • N๊ฐœ์˜ ์ค„์— Ti(์ƒ๋‹ด ์†Œ์š” ์ผ)์™€ Pi(๊ธˆ์•ก)๊ฐ€ ์ฃผ์–ด์ง
  • ๊ฐ ์ƒ๋‹ด์„ ์‹œ์ž‘ํ•˜๋ฉด ์ƒ๋‹ด์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†์Œ. N์ผ ๊ฐ„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธˆ์•ก์„ ๊ตฌํ•˜๋ผ
    • 1์ผ ์ฐจ Ti=3, Pi=10 ์ด๋ผ๋ฉด 1,2,3์ผ ์ฐจ๊นŒ์ง€ ๋‹ค๋ฅธ ์ƒ๋‹ด ๋ชปํ•จ, ๊ธˆ์•ก 10
    • 4์ผ ์ฐจ Ti=1, Pi=20 ์ด๋ผ๋ฉด 4์ผ ์ฐจ๊นŒ์ง€ ๋‹ค๋ฅธ ์ƒ๋‹ด ๋ชปํ•จ, ๋ˆ„์  ๊ธˆ์•ก 10+20 = 30

์ ‘๊ทผ

  • dp ํ™œ์šฉ ๊ฐ idx์˜ dp๊ฐ’์€ ํ•ด๋‹น ์ผ์ž๊นŒ์ง€ ๊ธˆ์•ก์˜ ์ตœ๋Œ€๊ฐ’
  • N์ผ ์ฐจ๋ถ€ํ„ฐ Ti, Pi๊ฐ’์„ ๊ฑฐ๊พธ๋กœ ํ™•์ธํ•˜๋ฉด์„œ
    • ์ƒ๋‹ด์ด ๊ฐ€๋Šฅํ•œ์ง€(i + Ti < N)
    • ๋ˆ„์  ๊ฐ’์ด ์ตœ๋Œ€์ธ์ง€ ํ™•์ธ

ํ’€์ด ๊ณผ์ •

  • table ๋ฐฐ์—ด ๋‚ด์— [Ti, Pi] ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ์ €์žฅ
  • for๋ฌธ: N-1๋ถ€ํ„ฐ -1๊นŒ์ง€ table์„ ๊ฑฐ๊พธ๋กœ ํ™•์ธ
  • i + table[i][0] > N ์ผ ๊ฒฝ์šฐ ์ƒ๋‹ด ๋ถˆ๊ฐ€ -> ์ด์ „ dp๊ฐ’๊ณผ ๋™์ผํ•œ dp[i+1]์„ ์ €์žฅ -> dp[i] = dp[i+1]
  • i + table[i][0] <= N ์ผ ๊ฒฝ์šฐ ์ƒ๋‹ด ๊ฐ€๋Šฅ -> ์ตœ๋Œ€๊ฐ’ ๋น„๊ต(์ด์ „ dp๊ฐ’, ์ƒ๋‹ด ์ง„ํ–‰ ์‹œ ๊ธˆ์•ก) -> max(dp[i+1], dp[i+table[i][0]]+table[i][1])

๋ฐฑ์„ฑํ˜ธ - #2011 ์•”ํ˜ธ์ฝ”๋“œ

๋ฌธ์ œ ํ•ด์„

  • ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ˆซ์ž(1-26)๋กœ ์•”ํ˜ธํ™” ํ•ด์„œ ํ•˜๋‚˜์˜ ๊ธด ์ˆซ์ž๋กœ ๋งŒ๋“ ๋‹ค. ์ด ๋•Œ ์ˆซ์ž๋ฅผ ๋‹ค์‹œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•ด์„ํ•  ๊ฒฝ์šฐ, ํ•ด์„ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ์•”ํ˜ธ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ ํ•ด์„์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ 1000000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ ‘๊ทผ

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ƒํ™ฉ์€ N๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์•ž์˜ N-1๊ฐœ์˜ ์ˆซ์ž์— N๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์™€ N-2๊ฐœ์˜ ์ˆซ์ž์— N-1๋ฒˆ์งธ ์ˆ˜์™€ N-2๋ฒˆ์งธ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
  • ์ ํ™”์‹ DP(N) = DP(N-1)+DP(N-2)
  • ๊ทธ๋Ÿฌ๋‚˜ ์ถ”๊ฐ€๋˜๋Š” ์ˆซ์ž๊ฐ€ 0์ด๊ฑฐ๋‚˜ 27 ์ด์ƒ์ผ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

ํ’€์ด ๊ณผ์ •

  • ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
  • dp๋ฅผ (์ฝ”๋“œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด+1)๋งŒํผ 0์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค. *๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ธ๋ฐ ์ž…๋ ฅ์ด 0์ธ ๊ฒฝ์šฐ, ๋ถˆ๊ฐ€๋Šฅํ•œ ์•”ํ˜ธ์ด๋ฏ€๋กœ 0์„ ์ถœ๋ ฅํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด๊ณ , 0 ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 1๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 1์„ ์ถœ๋ ฅํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 2๋ถ€ํ„ฐ ๋ฌธ์ž์—ด N๊นŒ์ง€, dp[2]~dp[N]์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ dp[0]=1, dp[1]=1์„ ์„ค์ •ํ•œ๋‹ค. ํ‰๋ฒ”ํ•œ ์ƒํ™ฉ์— dp[2]=dp[1]+dp[0]=2 ์ด๊ณ , ํŠน์ˆ˜ ์ƒํ™ฉ์ธ 203 ๊ฐ™์€ ๊ฒฝ์šฐ๋„ 20/3 ์œผ๋กœ๋งŒ ํ•ด์„์ด ๊ฐ€๋Šฅํ•œ๋ฐ ์ด๊ฒƒ๋„ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 1์ด๋ผ ํŽธ๋ฆฌ๋ฅผ ์œ„ํ•ด dp[0]๋„ 1๋กœ ์„ค์ •ํ•œ๋‹ค.
  • dp์˜ N๋ฒˆ์งธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ, ์˜ˆ์‹œ๋กœ โ€ฆ..3421 ์—์„œ 1์ด N๋ฒˆ์งธ ์ˆ˜์ผ ๋•Œ, ๋‘ ์ž๋ฆฌ ์ˆ˜๋กœ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” 21, N-1๋ฒˆ์งธ ์ˆ˜ 2, N๋ฒˆ์งธ ์ˆ˜ 1์„ ๋ชจ๋‘ ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜ ํ›„ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
  • ๋งŒ์•ฝ์— 0์ด ์—ฐ์†์œผ๋กœ ๋‘ ๋ฒˆ ์žˆ๊ฑฐ๋‚˜, 30๊ฐ™์ด 3/0 ๊ณผ 30๊ฐ™์ด ๋‘˜ ๋‹ค ํ•ด์„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ๋ถˆ๊ฐ€๋Šฅํ•œ ์•”ํ˜ธ์ด๋ฏ€๋กœ 0์„ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค. *๋งŒ์•ฝ์— 51๊ฐ™์ด 26๋ณด๋‹ค ํฌ์ง€๋งŒ, 5/1 ๋กœ๋Š” ํ•ด์„์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” dp[n]=dp[n-1]์ด ์„ฑ๋ฆฝํ•œ๋‹ค.
  • ๋งŒ์•ฝ์— 10 ๊ฐ™์ด 26๋ณด๋‹ค ์ž‘์ง€๋งŒ, 1/0 ์œผ๋กœ๋Š” ํ•ด์„์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” dp[n]= dp[n-2]๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค. *๋งŒ์•ฝ์— 2201 ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” 2/20/1 ๊ฐ™์ด ํ•ด์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค, ์ด ๋•Œ 201 ๋ถ€๋ถ„์€ 1๊ฐ€์ง€ ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, 06 ๊ฐ™์ด ๊ทธ์ „ ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋Š” dp[n]=dp[n-3]์ด ์„ฑ๋ฆฝํ•œ๋‹ค. *๊ทธ ์™ธ์˜ ํ‰๋ฒ”ํ•œ ๊ฒฝ์šฐ์—๋Š” dp[n]=(dp[n-1]+dp[n-2])%1000000 ์ด ์„ฑ๋ฆฝํ•œ๋‹ค. *dp ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์ธ dp[-1]์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ง€์˜์‹  - #12865 ํ‰๋ฒ”ํ•œ๋ฐฐ๋‚ญ DP

๋ฌธ์ œ ํ•ด์„

  • ๋ฐฐ๋‚ญ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ“๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ๊ณ , ์ผ์ • ๊ฐ€์น˜์™€ ๋ฌด๊ฒŒ๊ฐ€ ์žˆ๋Š” ์ง๋“ค์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ๋•Œ, ๊ฐ€์น˜์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • ์ „ํ˜•์ ์ธ ๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์ด ๋‚˜๋ˆ„์–ด ์งˆ ์ˆ˜ ์—†์„ ๋•Œ ์ด๋ฏ€๋กœ 0-1 ๋ฐฐ๋‚ญ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.

์ ‘๊ทผ

  • 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ฐ’์„ ๊ณ„์† ๊ฐฑ์‹ ํ•ด๋‚˜๊ฐ„๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ชจ๋“  ์ง๋“ค์„ i(์„ธ๋กœ)๋กœ, ๊ทธ๋ฆฌ๊ณ  ๋ฌด๊ฒŒ K๋ฅผ j(๊ฐ€๋กœ)๋กœ 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.

ํ’€์ด ๊ณผ์ •

  • j๊ฐ€ ํ•ด๋‹น ์ง์˜ ๋ฌด๊ฒŒ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด knapsack[i-1][j] (๊ฐ™์€ j์ด ์ผ๋•Œ ์ œ์ผ ์ตœ์‹ ์˜ ๊ฐ’)
  • j๊ฐ€ ํ•ด๋‹น ์ง์˜ ๋ฌด๊ฒŒ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด knapsack[i-1][j]์™€ ํ•ด๋‹น์ง์˜ ๊ฐ€์น˜+knapsack[i-1][j-ํ•ด๋‹น ์ง์˜ ๋ฌด๊ฒŒ] ๋‘˜์ค‘ ํฐ๊ฒƒ์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • knapsack[n][k]๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๊น€์žฌ๋ฏผ - #1463 1๋กœ ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ ํ•ด์„

  • ์ฃผ์–ด์ง„ ์ •์ˆ˜ N์— ๋Œ€ํ•˜์—ฌ 2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ 3์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ 1์„ ๋นผ์„œ 1๋กœ ๋งŒ๋“ ๋‹ค

์ ‘๊ทผ

  • ์ตœ์ ํ•ด๋ฅผ dp๋ฐฐ์—ด index N์— ์ €์žฅ
  • 2๋กœ ๋‚˜๋ˆ„์–ด ์ง„๋‹ค๋ฉด count 1๊ณผ N์—์„œ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚œ ๋‚˜๋จธ์ง€ dp[N//2] ์ตœ์ ํ•ด count๋ฅผ ๋”ํ•œ๊ฐ’์„ index N์— ์ €์žฅํ•ด๋‚˜๊ฐ„๋‹ค. 3์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฉฐ ์ด์™ธ ๊ฒฝ์šฐ๋Š” count1๊ณผ๋ฐ”๋กœ ์ „ dp[N-1] count๋ฅผ ๋”ํ•œ๋‹ค
  • ์ ํ™”์‹ N์ด 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ๋•Œ DP(N) = 1 + dp[N//2] 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ๋•Œ DP(N) = 1 + dp[N//3] ์ด์™ธ DP(N) = 1 + dp[N-1]

ํ’€์ด ๊ณผ์ •

  • ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
  • dp ๋ฐฐ์—ด์— N์ด 0์ผ ๊ฒฝ์šฐ, 1์ผ ๊ฒฝ์šฐ, 2์ผ ๊ฒฝ์šฐ, 3์ผ ๊ฒฝ์šฐ ์ตœ์ ํ•ด๋ฅผ ๋„ฃ๋Š”๋‹ค.
  • N์ด 4์ด์ƒ์ด๋ผ๋ฉด for๋ฌธ์ด ๋Œ์•„๊ฐ„๋‹ค.
  • 2๋กœ ๋‚˜๋ˆˆ ์ตœ์ ํ•ด์™€ 3์œผ๋กœ ๋‚˜๋ˆˆ ์ตœ์ ํ•ด, ๋ฐ”๋กœ ์ „ ์ตœ์ ํ•ด ์ค‘ ๊ฐ€์žฅ ์ตœ์†Œ์ธ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด min_arr๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
  • 2๋กœ ๋‚˜๋ˆ„์–ด ์ง„๋‹ค๋ฉด count 1๊ณผ N์—์„œ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚œ ๋‚˜๋จธ์ง€ dp[N//2] ์ตœ์ ํ•ด count๋ฅผ ๋”ํ•œ๊ฐ’์„ index N์— ์ €์žฅํ•ด๋‚˜๊ฐ„๋‹ค. 3์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฉฐ ์ด์™ธ ๊ฒฝ์šฐ๋Š” count1๊ณผ๋ฐ”๋กœ ์ „ dp[N-1] count๋ฅผ ๋”ํ•œ๋‹ค
  • min_arr์—์„œ 2๋กœ ๋‚˜๋ˆˆ ์ตœ์ ํ•ด๋Š” 0, 3์œผ๋กœ ๋‚˜๋ˆˆ ์ตœ์ ํ•ด๋Š” 1, -1์„ ํ•œ ์ตœ์ ํ•ด๋Š” 3์— ๋Œ€์ž…ํ•˜์—ฌ ์ตœ์†Œ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ์ตœ์†Œ์ธ ์ตœ์ ํ•ด๋ฅผ dp์— ๋Œ€์ž…ํ•œ๋‹ค.
  • N์˜ ์ตœ์ ํ•ด์ธ dp[X]๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.