๋ฌธ์
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ์์ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋ 4์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์์ด A๋ฅผ ์ด๋ฃจ๊ณ ์๋ Ai๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
import sys
n=int(sys.stdin.readline())
numbers=list(map(int, sys.stdin.readline().split(' ')))
dp=[1]*n
for idx in range(n):
for j in range(idx):
if numbers[j]<numbers[idx]:
dp[idx]=max(dp[idx], dp[j]+1)
print(max(dp))
- LIS(Longest Increasing Subsequence) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ฌธ์ ์๋ค.
- ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ์์ด์ด๋, ์์๊ฐ n๊ฐ์ธ ๋ฐฐ์ด์ ์ผ๋ถ ์์๋ฅผ ๊ณจ๋ผ๋ด์ ๋ง๋ ๋ถ๋ถ ์์ด ์ค, ๊ฐ ์์๊ฐ ์ด์ ์์๋ณด๋ค ํฌ๋ค๋ ์กฐ๊ฑด์ ๋ง์กฑํ๊ณ , ๊ทธ ๊ธธ์ด๊ฐ ์ต๋์ธ ๋ถ๋ถ ์์ด์ด๋ค.
- dp๋ฅผ ์ด์ฉํด์ idx๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ ๋ ๋ง๋ค ์ ์๋ ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ ๊ตฌํ ์ ์๋ค.
- ์ฆ, dp[A]=B ๋ผ๋ ๋ป์ A๋ฒ ์ธ๋ฑ์ค ์์๋ฅผ ์ ํํ์ ๋์ ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ B๋ผ๋ ๋ป์ด๋ค.
- 0๋ฒ์งธ๋ถํฐ n-1๋ฒ์งธ ์ธ๋ฑ์ค๊น์ง ํ์ํ๋ฉด์ idx๋ฒ ์ซ์ ์์ ์๋ ์ซ์๋ค ์ค idx๋ฒ ์ซ์๋ณด๋ค ์์ ์๊ฐ ์์ ๊ฒฝ์ฐ, ๊ทธ ์ซ์์ dp๊ฐ+1๊ณผ dp[idx] ์ค ๋ ํฐ ๊ฐ์ dp[idx]์ ๋ฃ์ด์ฃผ๋ ์ฐ์ฐ์ ๋ฐ๋ณตํ๋ค.
- ์ด ๊ณผ์ ์ ๋ฌธ์ ์ ์์ 1๋ฒ์ผ๋ก ํ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 15989 ๐ฅ] 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2023.08.18 |
---|---|
[๋ฐฑ์ค 1943 ๐ฅ] ๋์ ๋ถ๋ฐฐ (0) | 2023.08.16 |
[๋ฐฑ์ค 2631 ๐ฅ] ์ค์ธ์ฐ๊ธฐ (0) | 2023.08.12 |
[๋ฐฑ์ค 17404 ๐ฅ] RGB ๊ฑฐ๋ฆฌ2 (0) | 2023.07.27 |
[๋ฐฑ์ค 10942 ๐ฅ] ํฐ๋ฆผ๋๋กฌ? (0) | 2023.07.12 |