๐ฉ๐ปโ๐ป๋ฌธ์ ์ค๋ช
[์ด์ฝํ
Ch16-34] ๋ณ์ฌ ๋ฐฐ์นํ๊ธฐ
โ๏ธIdea Sketch
๋ฌธ์ ์์ฝ
๋ณ์ฌ๋ค์ ์ ํฌ๋ ฅ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ๋ฐฐ์นํ๊ณ ์ถ๋ค. ๋จ, ์ ํฌ๋ ฅ ์ค๋ณต์ ํ์ฉ๋์ง ์์ผ๋ฉฐ, ๋ณ์ฌ๋ฅผ ์ด์ธ์์ผ ๋ด๋ฆผ์ฐจ์ ๋ฐฐ์นํ๋ค. ์ด ๋ ์์ธ๋์ง ์๊ณ ๋จ์ ์๋ ๋ณ์ฌ์ ์๊ฐ ์ต๋๊ฐ ๋๋๋ก ํ๋ผ.
์๊ฐ๋ณต์ก๋
O(n^2)
์ด์ค for๋ฌธ์ผ๋ก ์ด์คํ์์ ํ๊ธฐ ๋๋ฌธ์ O(n^2) ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ, LIS
๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด LIS์ ์ ํ์ ์ธ ๋ฌธ์ ์ด๋ค. ๋ถ๋ถ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ๋งค ์ฐจ๋ก๋ง๋ค ๊ณ์ฐํ์ฌ dp ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด ๋๋ค.
โ๏ธ๋ด ์์ค์ฝ๋
- dp ๋ฐฐ์ด : i๋ฒ์งธ ๋ณ์ฌ๊ฐ ๋ง์ง๋ง์ธ ๋ถ๋ถ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ค.
- ๋๋ฒ์งธ for๋ฌธ์์ i-1๋ฒ์งธ๋ถํฐ ์ญ์์ผ๋ก ๋ณ์ฌ๋ฅผ ํ์ํ๋ค. ์ ํฌ๋ ฅ์ด i๋ฒ์งธ ๋ณ์ฌ๋ณด๋ค ํฌ๋ฉด์ ๋ถ๋ถ ์์ด์ ์ต๋ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ํฐ ์๋ฅผ ๊ตฌํ๋ค. ๊ตฌํ ๊ฐ์ dp๋ฐฐ์ด์ ๊ฐฑ์ ํ๋ค.
- i๋ฒ์งธ ๋ณ์ฌ๋ณด๋ค ์ ํฌ๋ ฅ์ด ๋ ํฐ ๋ณ์ฌ๊ฐ ์์ง ๋์ค์ง ์์ ๊ฒฝ์ฐ, ๋ถ๋ถ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ 1๋ก ์ค์ ํ๋ค.
์ ์ฒด ์ฝ๋
import sys
si = sys.stdin.readline
n = int(si())
seq = list(map(int, si().split()))
dp = [1] + [0] * (n - 1)
for i in range(1, n):
for j in range(i-1, -1, -1):
if seq[j] > seq[i]:
dp[i] = max(dp[i], dp[j] + 1)
if dp[i] == 0:
dp[i] = 1
print(n - max(dp))