๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ,, ๋์ ํ ์ํ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ฅ๋จ๋ฆฌ๊ณ ..
์๊ณ ๋ณด๋ LIS๋ผ๋ ํ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ ๋ฌธ์ ์๋ค.
๊ทผ๋ฐ LIS๋ DP(๋์ ๊ณํ๋ฒ)์ ์ฌ์ฉํด์ผ ๊ฐ์ฅ ํจ์จ์ ์ด๋ผ๊ณ ํ๋๋ผ..
๋ฐ๋ผ์ ์ค๋์ ๋์ ๊ณํ๋ฒ์ ๋ํด ๊ณต๋ถํด๋ณธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๐ ๋์ ๊ณํ๋ฒ (Dynamic Programming)
๋์ ๊ณํ๋ฒ์ ์ด๋ฆ๊ณผ๋ ์ข ๋งค์นญ์ด ์๋๋๋ฏ.?..ํ๋ฐ
ํ ๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ํ๊ณ ,
๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด๋ ์ํฅ์ ์ ๊ทผ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์์ ์ค๋ช ์ ๋ฐ๋ฅด๋ฉด
๋์ ๊ณํ๋ฒ์ ์ธ์ ์ฌ์ฉํ ์ ์๋์ง ๊ตฌ์ฒดํํ ์ ์๋ค. ๐
1. ๊ฐ์ ๋ฐ๋ณต์ ์ํํ๋ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
2. ๋์ผํ ๋ฐ๋ณต ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ผ์ ํด์ผํ๋ค.
๐ Memoization
์ถ๊ฐ๋ก, ์ ์ค๋ช ์ ๋ค์ ํ ๋ฒ ๋ณด๋ฉด
์์ ๋ถ๋ถ์ ๋๋์ด ํผ ๊ฒฐ๊ณผ๋ฅผ '์ ์ฅ'ํ๋ค๊ณ ์ ์ด๋์๋ค.
๋ฐ๋ก ์ด ๋ถ๋ถ์ด ๋์ ๊ณํ๋ฒ์ ํต์ฌ์ด๋คโ๏ธ
๋ฉ๋ชจ์ด์ ์ด์ ์ ํ ๋ฒ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ฐ๋ณต์์ ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ฅํด๋๋ ๊ฒ์ ๋งํ๋ค.
์ด ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๋์ ๊ณํ๋ฒ์ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ ํจ์จ์ ์ผ๋ก ํ ์ ์๊ฒ ํด์ค๋ค.
๐ DP ๋ฌธ์ ๋ฅผ ํ ๋, ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ๊ฒฝ์ฐ์๋
๋ฌด์กฐ๊ฑด ์ด ๋ฉ๋ชจ์ด์ ์ด์ ์ด ์ ๋๋ก ๋๊ณ ์๋์ง ํ์ธํด๋ด์ผํ๋ค.
์ด๋ฏธ ํ ๋ฒ ๊ณ์ฐํ ๊ฐ์ ์ค๋ณตํด์ ๋ ๊ณ์ฐํ๊ฒ ๋๋ ์๊ฐ ๊ทธ๊ฑด DP๊ฐ ์๋๋ค.
๐ ํผ๋ณด๋์น ์ ๊ณ์ฐ ๊ตฌํ
์ด์ ์ฌ๊ทํจ์ ๊ธ์์๋ ํผ๋ณด๋์น ์ ๊ณ์ฐ์ ๊ตฌํํ๋๋ฐ,
๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํ๋ฉด ํผ๋ณด๋์น ์๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๊ตฌํ ์ ์๋ค๊ณ ํ๋ค,.,!!!
๋ฐ๋ผ์ ์ค๋๋ ํผ๋ณด๋์น ์๋ฅผ ํ ๋ฒ ๊ตฌํด๋ณด์.
import Foundation
func Fibo(_ n: Int) -> Int {
var memory = [0, 1]
for i in 2...n {
memory.append(memory[i - 1] + memory[i - 2])
}
return memory[n]
}
print(Fibo(4)) // 3
๋์ ๊ณํ๋ฒ์ผ๋ก ๊ตฌํํ ํผ๋ณด๋์น ์ ๊ณ์ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ณ์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํจ์ ๋ฐ๋ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฅ๋ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ฐ๋ณต์์ ์ฌ์ฉํ์ฌ ๋ ์ฐ์ฐ, ์ ์ฅ์ ๊ณ์ํ๋ค.
์ด๋ ๊ฒ ๊ตฌํํ ์ฝ๋๊ฐ ์ ์ฌ๊ทํจ์๋ก ๊ตฌํํ ์ฝ๋๋ณด๋ค ๋ ํจ์จ์ ์ธ์ง ์ดํด๋ณด์.
(์ฌ๊ทํจ์๋ก ๊ตฌํํ ํผ๋ณด๋์น ์ ๊ณ์ฐ์ ์๊ธฐ๐๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
๐ ํผ๋ณด๋์น ์ ๊ณ์ฐ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅธ ํจ์จ์ฑ
์ฌ๊ทํจ์์ ๋์ ๊ณํ๋ฒ ๊ฐ๊ฐ์ ์คํ ๊ณผ์ ์ ๋น๊ตํ์ฌ ํจ์จ์ฑ์ ๋ฐ์ ธ๋ณด์.
#1 ์ฌ๊ท ํจ์๋ก ๊ตฌํ
๋ง์ฝ n์ผ๋ก 4๋ฅผ ์ ๋ ฅํ์ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ํ๋๋๋ฐ,
Fibo(2)๋ฅผ ๋ ๋ฒ ๊ณ์ฐํ๊ณ , Fibo(1)์ ์ธ ๋ฒ, Fibo(0)์ ๋ ๋ฒ ๊ณ์ฐํ๋ค.
์์์ ๋งํ๋ฏ DP๋ ๋์ผํ ๊ณ์ฐ์ ๋ ๋ฒํ์ง ์๋๋ก memoization ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ตณ์ด ๊ฐ์ ์ํ์ ๋ฐ๋ณตํ ํ์๋ ์์ผ๋ฏ๋ก, ํ ๋ฒ ๊ณ์ฐํ ๊ฐ์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํด์ผ ํจ์จ์ ๋์ผ ์ ์๋ค.
์ฌ๊ธฐ์๋ ์์ ๊ฐ์ ๋์ ํด์ ์ผ์ด์ค๋ฅผ ํ์ธํ์ง๋ง,
๋ ํฐ ์๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ๋ผ๋ฉด ์ค๋ณต๋๋ ์ํ์ด ๋ฌด์ํ ๋ง์์ง๊ฒ ๋๋ค.
#2 ๋์ ๊ณํ๋ฒ์ผ๋ก ๊ตฌํ
์์ ๊ฐ์ด ๋ฐฐ์ด์ ์์ฑํ๊ณ ,
์์ ๋ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐํ๋ ์ํ์ ๋ฐ๋ณตํ๋ค.
๋ฐ๋ผ์ ์๋ฌด๋ฆฌ ํฐ ์๋ผ๋ ์ค๋ณต๋๋ ์ํ์์ด ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
๐ ์ ๋ฆฌ
๋์ ๊ณํ๋ฒ์ ๊ฐ๋ ๊ณผ ๊ตฌํ ๋ฐฉ๋ฒ๊น์ง ์์๋ณด์๋ค.
๋์ ๊ณํ๋ฒ์ ํ ๋ง๋๋ก, '์ ์ฅ์ ๋ฐ๋ณต'์ด๋ผ๊ณ ์์ฝํ๊ณ ์ถ๋ค.
๋์ ๊ณํ๋ฒ์ ์ง๊ธ๊น์ง ๋จ์ ๊ตฌํ ๋ฌธ์ ์์๋ ๋๋ ๋ชจ๋ฅด๊ฒ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
์ฌ์ด ๋ฌธ์ ์์๋ ๋ด๊ฐ ์ฐ๋๊ฒ ๋์ ๊ณํ๋ฒ์ธ์ง ๋ญ์ง๋ ๋ชจ๋ฅด๊ณ ์๋ ์ ์ผ์ง๋ง
์กฐ๊ธ ๋ ๋ณต์กํ ๋ฌธ์ ๋ค์ ์ ํ๋ฉด์๋ ์ธ์ dp๋ฅผ ์ฌ์ฉํ ์ ์๋์ง,
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ ๋์ ํจ์จ์ฑ ๋ฑ์ ์ ํํ ์๊ณ ์์ ํ์๊ฐ ์๋ค.
'5๏ธโฃ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm Note] ์์ด (feat. ์ฌ๊ท) (0) | 2022.08.15 |
---|---|
[Swift Algorithm Note] ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด 2 (feat. BS) (0) | 2021.08.29 |
[Swift Algorithm Note] ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (feat. DP) (0) | 2021.08.28 |
[Swift Algorithm Note] ๊ผฌ๋ฆฌ ์ฌ๊ท ํจ์ (feat. Fibonacci) (0) | 2021.07.09 |
[Swift Algorithm Note] ์ฌ๊ทํจ์ ์ ๋ฆฌ (feat. Factorial) (0) | 2021.07.08 |
๋๊ธ