๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/11053
๋ฌธ์ ํ์ด IDEA
์ด๋ฐ์ ๋๋์ฒด ์ด๊ฒ ๋ฌด์จ ์๋ฆฌ์ผ, ๊ทธ๋ฅ ์ค๋ฆ์ฐจ์์ด๋ฉด ์์ด์ด ๋๋๊ฑฐ์? ๋ผ๊ณ ์๊ฐํ๋ฉฐ ์์ํ์ง๋ง, ๋ฐ๋ก ๊ทธ๊ฒ ์ ์ดํดํ ๊ฑฐ์๋ค. ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (LIS, Longest Increasing Subsequences) ๋ผ๋ ๊ฐ๋ ์ธ๋ฐ, ์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ด๋ฃจ์ด์ง ์์ด ์ค, ๊ฐ์ฅ ๊ธด ๊ธธ์ด๋ฅผ ๊ฐ๋ ์์ด(LIS)์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ผ๋ ๋ฌธ์ ์๋ค. LIS ์ ๋ํ ๊ฐ๋ ์, ๋ฐ๋ก ์ง์ ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋ณด๊ณ ์ดํดํ๊ธธ ๋ฐ๋๋ค.
https://didu-story.tistory.com/236
์ด ๋ฌธ์ ๋ LIS ๊ฐ๋ ์ ๊ตฌํํ ์ ์๋๋? ๋๊ฒ ํต์ฌ์ด๋ค. ๋๋ ์๋์ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํ์๋ค. (์ฌ์ค์ LIS ๊ฐ๋ ๊ณผ ๋์ผ)
- ์ ๋ ฅ๋ฐ๋ ์์ด์ ๊ธธ์ด n, ์ ๋ ฅ๋ฐ๋ ์์ด inputArray, i๋ฒ์งธ ๊น์ง์ ์ต์ฅ ์์ด ๊ธธ์ด๋ฅผ ๋ฃ๋ ๋ฐฐ์ด dp
- ํ์ฌ ๋น๊ตํ๊ณ ์ถ์ ์์ด์ ์์น i, ๋น๊ตํ ์ด์ ์ ์ธ๋ฑ์ค ๋ฒํธ j (0๋ถํฐ i๊น์ง)
- ํ์ฌ inputArray[i] ๊ฐ ๋ง์ฝ 3 ์ด๋ผ๋ฉด, inputArray[0], inputArray[1], inputArray[2] ์ ๋น๊ตํด์ผํ๊ณ , ๋น๊ต ํ inputArray[3]๊ฐ์ด ๋ ํฌ๋ค๋ฉด dp์ ๊ฐ์ +1 ํด์ฃผ์ด์ผ ํ๋ค.์ด ๊ณผ์ ์ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค.
์์ค์ฝ๋
let n = Int(readLine()!)!
let inputArray = readLine()!.split(separator: " ").map { Int(String($0))! }
var dp: [Int] = []
for i in 0..<n {
dp.append(1)
for j in 0..<i+1 {
if inputArray[j] < inputArray[i] {
dp[i] = max(dp[i], dp[j]+1)
}
}
}
print(dp.max()!)
โป ๋ง์ง๋ง์ dp.max() ๊ฐ์ ์ต์ ๋ ๊ฐ์ผ๋ก ๋ฐํ๋๋๊น ์ฃผ์ํ์!