[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ์žฌ๊ท€ํ˜ธ์ถœ (๋™์  ๊ณ„ํš๋ฒ•)

๐Ÿ‘๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ Dynamic Programming ์ฆ‰, DP๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•์ด๋‹ค.

๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ ํ™”์‹์œผ๋กœ ๋งŒ๋“ค์–ด ๋ถ„ํ•  ์ •๋ณตํ•  ๋•Œ, ๋ฐ˜๋ณต๋ฌธ ๋˜๋Š” ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ๊ณ„์‚ฐ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•ด๋‘์–ด ์ค‘๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ด๋Š” ์ ํ™”์‹ ์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๋ณดํ†ต ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

DP ๊ณผ์ •

  1. ์ „์ฒด ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
  2. 1๋ฒˆ์˜ ๊ณผ์ •์—์„œ ์ ํ™”์‹์„ ๋„์ถœํ•œ๋‹ค.
  3. ์ ํ™”์‹์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•œ๋‹ค.
    1. bottom-up
    2. top-down
  4. ์—†๋‹ค๋ฉด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•œ๋‹ค.
  5. ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋ฐฉ์‹์€ ๋ณดํ†ต ๋ฐฐ์—ด์ด๋‹ค.
  6. ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

๋Œ€ํ‘œ ๋ฌธ์ œ

  1. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ตฌํ•˜๊ธฐ

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์™„์ „ํƒ์ƒ‰์˜ ๋ฐฉ๋ฒ•์„ ์“ด๋‹ค๋ฉด ๊ทธ ๊ณผ์ • ์ค‘์— ํ•œ ๋ฒˆ ํ˜ธ์ถœํ–ˆ๋˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋˜ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜ 4๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.

 

img

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ค‘๋ณต๋˜๋Š” fibo(2)๋‚˜ fibo(1), fibo(0)์ด ๊ณ„์† ๋“ฑ์žฅํ•œ๋‹ค. DP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด fibo(4)์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋Š” 4ํšŒ ๋ฟ์ผ ๊ฒƒ์ด๋‹ค.

  • ์ „์ฒด ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
  • ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ ํ™”์‹์„ ๋งŒ๋“ ๋‹ค.
fibo(i) = fibo(i-1) + fibo(i-2)
  • ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๋‹ต์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

img

ํŒŒ๋ž€์ƒ‰ ์ƒ์ž๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์•ž์˜ ์—ฐ๋‘์ƒ‰ ์ƒ์ž 2๊ฐœ๊ฐ€ ํ•„์š”ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

  1. ๋ฐฐ์—ด ๊ณฑ์˜ ๊ณ„์‚ฐ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๋ฌธ์ œ

๋ฐฐ์—ด์˜ ๊ณฑ์€ ๊ณ„์‚ฐ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์–ธ์ œ๋‚˜ ๊ฐ’์ด ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ปดํ“จํ„ฐ์—์„œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋‹ฌ๋ผ์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ๊ณฑ์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ณ„์‚ฐํ•ด์•ผํ• ์ง€๋ฅผ DP๋กœ ๊ตฌํ•ด๋ณด์ž.

img

 

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€์˜ A, B, C ํ–‰๋ ฌ์ด ์žˆ์„ ๋•Œ ์„ธ ํ–‰๋ ฌ์˜ ๊ณฑ์„ ๊ตฌํ•˜๋ ค ํ•œ๋‹ค.

img

 

์œ„์™€ ๊ฐ™์€ 3๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ–ˆ์„ ๋•Œ ์ด ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค. ๋‘ ํ–‰๋ ฌ์„ ๊ณฑํ•  ๋•Œ๋Š” ์•ž ํ–‰๋ ฌ์˜ ํ–‰๊ณผ ๋’ท ํ–‰๋ ฌ์˜ ์—ด์„ ๊ณฑํ•˜๋ฉด์„œ ๊ฐ ์š”์†Œ๋ฅผ ์•ž ํ–‰๋ ฌ์˜ ์—ด, ์ฆ‰ ๋’ท ํ–‰๋ ฌ์˜ ํ–‰๋งŒํผ ๊ณฑํ•˜๋ฏ€๋กœ ์„ธ๊ฐ€์ง€ ์ˆ˜๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ABC ์ˆœ์„œ๋กœ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์„ ํ–ˆ์„ ๋•Œ๋Š” AB๋ฅผ ๋จผ์ € ๊ณฑํ•œ ํ›„ ๋‚˜์˜จ {(2, 4) => ํ–‰์ด 2, ์—ด์ด 4์ธ ํ–‰๋ ฌ}๊ณผ C๋ฅผ ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด๋ณด๋Š” ์™„์ „ํƒ์ƒ‰์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ๋ช‡๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฒน์ณ๋ณด์ธ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด A,B,C,D 4๊ฐœ์˜ ํ–‰๋ ฌ์ด ์žˆ์„ ๋•Œ (AB)(CD)์™€ A(BCD) ์—ฐ์‚ฐ ์ค‘ CD๋Š” ์ด๋ฏธ ํ•ด๋‘” ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ๋‹ค์‹œ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ DP๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ž.

  • ์ „์ฒด ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
  • ํ–‰๋ ฌ์˜ ๊ณฑ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ ์ˆ˜๋ผ๋Š” ์ „์ฒด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์„๊นŒ? ์ „์ฒด ํ–‰๋ ฌ์˜ ๊ณฑ์ด ์žˆ์„ ๋•Œ, 2๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋‘ ํ–‰๋ ฌ์„ ๋งŒ๋“œ๋Š” ๋ฐ์— ๋“œ๋Š” ์—ฐ์‚ฐ์˜ ์ˆ˜ + ๋‘ ํ–‰๋ ฌ์˜ ๊ณฑ์— ๋“œ๋Š” ์—ฐ์‚ฐ์˜ ์ˆ˜ ๋กœ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

img

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

 

  • ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ ํ™”์‹์„ ๋งŒ๋“ ๋‹ค.
// ์ •์˜
A(i) = d(i-1)*d(i)
M(i,j) = A(i)*A(i+1)*...*A(j)์˜ ์ตœ์†Œ ์—ฐ์‚ฐ ์ˆ˜

// ์ ํ™”์‹
M(i,j) = min ( M(i,k) + M(k+1,j) + d(i-1)d(k)d(j) )
// k๋Š” 1 ~ (j-1) ๊นŒ์ง€
// M(i,k) : k๊ฐ€ ๋นจ๊ฐ„ ๋ง‰๋Œ€์ด๊ณ , ์•ž์˜ ํ–‰๋ ฌ ๊ณฑ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ๋œปํ•จ
// M(k+1,j) : ๋’ค์˜ ํ–‰๋ ฌ ๊ณฑ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ๋œปํ•จ
// d(i-1)d(k)d(j) : ์•ž/๋’ค์˜ ํ–‰๋ ฌ์„ ๊ณฑํ•  ๋•Œ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ๋œปํ•จ
  • ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๋‹ต์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋‹ต์„ ํ–‰๋ ฌ์— ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•ด๋ณด๊ฒ ๋‹ค.

img

ํ–‰์€ i๋ฅผ ๋œปํ•˜๊ณ  ์—ด์€ j๋ฅผ ๋œปํ•œ๋‹ค. ํ‘œ์‹œํ•œ ๊ณณ์ธ M(1,2)์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ ํ™”์‹์— ๋Œ€์ž…ํ•ด๋ณด๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์—์„œ์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ k๋Š” 1์—์„œ 1๊นŒ์ง€์ด๋ฏ€๋กœ 1๋งŒ ํ•ด๋‹นํ•œ๋‹ค.

 

img

์ด ๊ทธ๋ฆผ์—์„œ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์˜ ๊ฐ’์„ ๊ตฌํ•˜๋ ค๋ฉด ๊ฐ™์€ ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ์นธ์„ ๊ณฑํ•ด์„œ ์ ํ™”์‹์„ ๊ณ„์‚ฐํ•œ ํ›„, ๊ทธ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„์•ผํ•œ๋‹ค. ์ ํ™”์‹์—์„œ ํšŒ์ƒ‰๋ถ€๋ถ„์€ k๊ฐ€ 1์ผ ๋•Œ์ด๊ณ , ์—ฐ๋‘์ƒ‰์€ k๊ฐ€ 2์ผ ๋•Œ, ๋…ธ๋ž€์ƒ‰์€ k๊ฐ€ 3์ผ ๋•Œ์ด๋‹ค.

=> ์ด๋ ‡๊ฒŒ O(n^3) ์งœ๋ฆฌ ๋ฐฐ์—ด์˜ ๊ณฑ ๋ฌธ์ œ๋ฅผ O(n)์งœ๋ฆฌ ๋ฌธ์ œ๋กœ ํƒˆ๋ฐ”๊ฟˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  1. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ

BOJ 12865. ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

 

[c++] BOJ 12865 :: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

๋‚œ์ด๋„ : ๊ณจ๋“œ 5 ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ : 1์‹œ๊ฐ„ ๋ฐ˜ ์ด์ƒ ๋ฌธ์ œ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ์˜ค๋‹ต ์ฒ˜์Œ์— ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ•˜๋˜ ์ตœ๋Œ€ํ•œ ์กฐํ•ฉ์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์„œ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์‹คํŒจ..! #include #include #include #incl

hini7.tistory.com

  1. ๊ธฐํƒ€ ๋ฌธ์ œ

์ฐธ๊ณ 

https://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EA%B3%84%ED%9A%8D%EB%B2%95

https://www.zerocho.com/category/Algorithm/post/584b979a580277001862f182

 

 

 ๋ถ€์ •ํ™•ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! 

 ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š” :) 

๋ฐ˜์‘ํ˜•