11053๋ฒ - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (LIS)
๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ํ์ํ๋ ๋ฌธ์ ์
๋๋ค.
์ด ๋ฌธ์ ๋ ์ด๋ถ ํ์๊ณผ DP ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ดํ ์ ์์ผ๋ ์ ๋ DP ์ฐ์ต์ค์ด๋ฏ๋ก DP๋ก ํ๊ฒ ์ต๋๋ค.
DP๋ก ํ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๊ฐ์ด ์๊ธด ๋ฆฌ์คํธ์ DP๊ฐ ์กด์ฌํ๋ค๋ฉด
์ด๋ฌํ ์ฉ์ผ๋ก ํ์ฌ ์กฐ์ฌ๊ฐ ์ด์ ๊ฐ๋ค ์ค์์ ์์ ๊ฐ๋ค์ด ์กด์ฌํ๋ค๋ฉด ํด๋น ์์ ๊ฐ๋ค์ DP๊ฐ๋ค ์ค์์ ์ ์ผ ํฐ DP + 1์ ํ์ฌ ์กฐ์ฌ๊ฐ DP์ ๋ฃ์ด์ฃผ๋ ์ฉ์ผ๋ก ์ฝ๋ฉํ๋ฉด ๋ฉ๋๋ค.
N = int(input())
lst = list(map(int,input().split()))
dp = [1]*len(lst)
๋จผ์ ์์ด์ ์ต์ ๊ธธ์ด๋ 1์ด๋ฏ๋ก 1์ len(lst)๋งํผ ๋ง๋ค์ด์ค๋๋ค.
for i in range(len(lst)):
maximum = 0
for j in range(i):
ํ์ฌ ์กฐ์ฌ๊ฐ์ lst[i], ์ด์ ๊ฐ๋ค ์กฐ์ฌ๋ lst[j]๋ก ๋งก๊ฒ ์ต๋๋ค.
if lst[j] < lst[i]:
if maximum < dp[j]:
maximum = dp[j]
dp[i] = maximum + 1
๋ง์ฝ ํ์ฌ ์กฐ์ฌ๊ฐ๋ณด๋ค ์ด์ ์กฐ์ฌ๊ฐ์ด ๋ ์๋ค๋ฉด, ์ด์ ์กฐ์ฌ๊ฐ๋ค ์ค ์ ์ผ ํฐ DP๋ฅผ maximum์ ๋ฃ์ด์ฃผ๊ณ maximum + 1์ ํ์ฌ ์กฐ์ฌ๊ฐ์ DP์ ๊ธฐ๋กํ๊ฒ ์ต๋๋ค.
print(max(dp))
๊ทธ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
11722๋ฒ - ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด
์๋ฆฌ๋ง ์๋ฉด ๊ฑฐ์ ๋ณด๋์ค ๋ฌธ์ ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ์กฐ์ฌ ๊ฐ ์ด์ ๊ฐ๋ค ์ค์์ ํฐ ๊ฒ ์กด์ฌํ๋ค๋ฉด ์ด์ ๊ฐ๋ค max(DP) + 1์ ํ์ฌ ์กฐ์ฌ๊ฐ DP์ ๋์
์์ผ์ฃผ๋ฉด ๋๋ ๋ฐฉ์์
๋๋ค.
N = int(input())
lst = list(map(int,input().split()))
dp = [1]*len(lst)
for i in range(len(lst)):
maximum = 0
for j in range(i):
if lst[i] < lst[j]:
if maximum < dp[j]:
maximum = dp[j]
dp[i] = maximum + 1
print(max(dp))
15686๋ฒ - ์นํจ ๋ฐฐ๋ฌ
๊ฑฐ์ ๋ค ํผ๊ฑฐ ๊ฐ์๋ฐ ์ํ๋ฆฌ๋ ๋ฌธ์ ์
๋๋ค.
์ง๋๋ฒ ํ์ด ํ ์ง๋ฌธ์ ์ฌ๋ ค๋ดค๋๋ฐ
๋ผ๊ณ ์น์ ํ ๋ต๋ณํด์ฃผ์
์ ์ ๋ฌธ์ ๋ฅผ ์ดํด๋ดค์ต๋๋ค.
? ใ
ใ
ใ
ใ
ใ
ใ
์ด๊ฒ ์ด๋ค ๋ง์ํ์๋์ง๋ ๊ฐ์ด ์กํ๋๋ฐ (์กฐํฉ ์ฝ๋ ์์ฑํ ๋ visited๋ฅผ ์ฐ์ง ๋ง๊ณ count ๋ณ์ ์ฆ๊ฐ ํ์์ผ๋ก ์ฌ๊ท๋ฅผ ๋๋ ค์ ๋ฐฑํธ๋ํน ๋ถ๋ถ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ฌ๋ผ? ์ด๋ฐ ๋๋์ธ ๊ฒ ๊ฐ์ต๋๋ค)
์ ๋ง ํ 5์๊ฐ๋์ ๊ณ ๋ฏผํด๋ ๊ฒฐ๊ตญ ๋ชปํ์์ต๋๋ค. ๋ค๋ฅธ ๋ฌธ์ ์ข ๋ ์ดํด๋ณด๋ค๊ฐ ํ์ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.