์ค๋์ ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (LIS)์ ๋ํด ์ ๋ฆฌํด๋ณด๋ คํ๋ค.
LIS๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง์ง๋ง, ๊ทธ ์ค์์๋ ๊ฐ์ฅ ๊ฐํธํ DP๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
(DP์ ๋ํด ๊ถ๊ธํ์ ๋ถ๋ค์ ์๊ธฐ๐๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
๐ ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (LIS)
์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ ๋ง ๊ทธ๋๋ก, ์ด๋ ํ ์์ด ์์์ ๊ฐ์ฅ ๊ธด! ์ฆ๊ฐํ๋ ์์ด์ ์ฐพ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ง๊ณ ๋์ด๊ฐ์ผํ ์ ์ ์ฆ๊ฐํ๋ ์๋ค์ด ์ฐ์ํ์ง ์์๋ ๋๋ค๋ ์ ์ด๋ค.๐ฅ
์๋ฅผ ๋ค์ด [1, 3, 2, 4, 6, 5] ์์ด์์์ LIS๋ [1, 2, 4, 6]์ผ๋ก, ๊ธธ์ด๊ฐ 4์ธ ์์ด์ด๋ค.
์์๊ฐ์ด LIS๋ ์ฐ์ํ๊ฑฐ๋, ํน์ ์ฐ์ํ์ง ์๋ ์ฆ๊ฐํ๋ ์๋ค์ ์์ด์ ๋งํ๋ค.
์ด LIS๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์ ์์ ๋ณ๋ก ๋๋ณด๋ค ์์, ์ฆ๊ฐํ๋ ์์ด์ด ๋ช ๊ฐ ์๋์ง ์ฐพ์์ฃผ์ด์ผํ๋๋ฐ
์์ ํ์์ผ๋ก๋ ๊ตฌํ ์ ์์ง๋ง, ์๊ฐ๋ณต์ก๋๊ฐ ๋๋ฌด ์ปค์ง๊ฒ๋๋ค.ใ
๋ฐ๋ผ์ ๊ทธ ์ฒซ ๋ฒ์งธ ํด๊ฒฐ์ฑ ์ด ๋ฐ๋ก DP๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
(๋ ๋ฒ์งธ๋ก๋ ์ด๋ถํ์์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ๊ทธ๊ฑด ๋ค์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.)
๐ DP๋ก LIS ๊ตฌํ๊ธฐ
๋๋ค์ผ๋ก ๋์ด๋ ํ ์์ด์์ LIS๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํด๋ณด์๋ค.
์๋์ ์์ ๊ฐ DP๋ก LIS๋ฅผ ๊ตฌํ๋ ๋ํ์ ์ธ ํํ์ด๋ค.
๐ ์์
import Foundation
let permu = [1, 3, 2, 5, 4, 6]
var count = [Int]()
var max = 1
for i in 0..<permu.count {
count.append(1)
for j in 0..<count.count {
if permu[j] < permu[i] && count[i] <= count[j] { count[i] = count[j]+1 }
}
if max < count[i] { max = count[i] }
}
print(max)
๋ณ์ ์ค๋ช
- permu : ์ ๋ ฅ ์์ด
- count : ์ ๋ ฅ ์์ด์ ์์๋ง๋ค ํด๋น ์์๊น์ง์ ์ต์ฅ ์์ด์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฐ์ด
- max : count ๋ฐฐ์ด์ ์ ์ฅ๋๋ ์ต์ฅ ์์ด์ ๊ธธ์ด ์ค ๊ฐ์ฅ ๊ธด ๊ธธ์ด๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์
์ฝ๋ ์ค๋ช
- permu ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ์์๋๋ก ๊ฒ์ฌํด์ฃผ๊ธฐ ์ํ 2์ค for๋ฌธ์ ์ฌ์ฉ
- ๋งค ๋ฐ๋ณต๋ง๋ค ๋จผ์ count ๋ฐฐ์ด์ 1์ ์ถ๊ฐํด์ฃผ์๋ค.
์๊ธฐ ์์ ์ธ์ ์ฆ๊ฐํ๋ ์๊ฐ ์์์ง๋ผ๋(ex. 1, 2, 7, 3), ์ต์ํ ์๊ธฐ ์์ ์ ๋ด์
๊ธธ์ด 1์ ์์ด์ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ผ๋ก 1์ ์ถ๊ฐํด์ค๋ค. - 1์ ์ถ๊ฐํ count ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ํ์ ๋ฐ๋ณต๋ฌธ์ ์คํํด์ฃผ๋๋ฐ,
์ฐ์ permu ๋ฐฐ์ด์์ j์์น์ ์๊ฐ i์์น ์์๋ณด๋ค ์์์ง ํ์ธํ๋ค. - ์๋ค๋ฉด count์ ์ ์ฅํด๋ j ๋ฒ์งธ ์์์ i ๋ฒ์งธ ์์๋ฅผ ๋น๊ตํ๋๋ฐ,
i ๋ฒ์งธ ์์, ๊ทธ๋ฌ๋๊น count์ ์ถ๊ฐํ ๋ง์ง๋ง ์์์ธ 1์ด count[j]๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด
i ๋ฒ์งธ ์์๋ j ๋ฒ์งธ ์์๊ฐ ๊ฐ์ง๋ ์ต์ฅ ์ฆ๊ฐ ์์ด ๊ฐ์์ 1์ ๋ํ ๋งํผ
์ต์ฅ ์ฆ๊ฐ์์ด์ ๊ฐ์ง๋ค๋ ๋ป์ผ๋ก ํด์ํ ์ ์๋ค. - ์ ์ํ์ ๋ฐ๋ณตํด์ฃผ๋ฉด ์ต์ฅ ์ฆ๊ฐ ์์ด์ ๊ฐ๋ ์์์ ๊ทธ ๊ธธ์ด๋ฅผ ํ์ธํ ์ ์๋ค.
๐ ์ ๋ฆฌ
DP๋ฅผ ์ด์ฉํ์ฌ LIS๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ , ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๋ค.
๊ณต๋ถํ๊ณ ๋๋ ์ฌ์ด ๊ฐ๋ ์ธ๋ฏํ์ง๋ง,
๋ชฐ๋์ ๋๋ ์ ๋ง ๋ช๋ ๋ฉฐ์น ๊ณ ๋ฏผํด๋ ๋ ์ค๋ฅด์ง ์์๋ค.ใ
๊ด๋ จ ๋ฌธ์ ๋ค์ ๋ง์ด ํ๋ฉฐ ์ตํ์ผ๊ฒ ๋ค.
๐ฅ ์ถ๊ฐ๋ก, DP๋ก LIS๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ณ ์ถ์ ์ฌ๋ฌ๋ถ๊ป,, ์ด ๋ฌธ์ ๋ฅผ,,
https://www.acmicpc.net/problem/1965
'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. Fibonacci) (0) | 2021.08.28 |
[Swift Algorithm Note] ๊ผฌ๋ฆฌ ์ฌ๊ท ํจ์ (feat. Fibonacci) (0) | 2021.07.09 |
[Swift Algorithm Note] ์ฌ๊ทํจ์ ์ ๋ฆฌ (feat. Factorial) (0) | 2021.07.08 |
๋๊ธ