2022. 1. 18. 07:26ใ๐ฑ Algorithm/DP
https://www.acmicpc.net/problem/11053
์ ๋ต ์ฝ๋
import sys
N = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
dp = [1] * N
for i in range(N):
for j in range(i):
if arr[j] < arr[i]:
dp[i] = max(dp[i], dp[j] + 1)
# print(dp)
print(max(dp))
๋ฌธ์ ์กฐ๊ฑด(N<=1000) ์ ์ด์คfor ๋ฌธ์ ์ฌ์ฉํด๋ ๋๊ฒ ๋ค๊ณ ๋ ์๊ฐํ์ง๋ง ์ ๊ทผ๋ฒ์ ๋ ์ฌ๋ฆฌ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์๋ค.
๋ ๊ฐ์ ์ธ๋ฑ์ค(i, j) ๋ฅผ ์ฌ์ฉํ๋๋ฐ, arr[j] ๊ฐ arr[i] ๋ณด๋ค ์์ ์์น(j < i)ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ตฌํ๊ณ ์ ํ๋ ๋ต์ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด
์ด๋ฏ๋ก, ํน์ ์ธ๋ฑ์ค์์ ์ผ๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ๋์ง ๋ณ๋์ ๋ฐฐ์ด
์ ๊ฐ์ ์ ์ฅํ ์ ์๋ค.
์ด ๋ณ๋์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ N ์ธ dp ๋ผ๊ณ ์ ํ๊ณ , ์ด๊ธฐ ์์๋ ๋ชจ๋ 1
๋ก ๊ฐ๋๋ค. ์์ ๋ณด๋ค ํฐ ์์๊ฐ ์๋ค ํ๋๋ผ๋, ์๊ธฐ ์์ ์ ์ฒซ๋ฒ์งธ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์์์ ๊ฐ์ ๋ชจ๋ 1๋ก ์ด๊ธฐํ ํ๋ค.
๋ ์ธ๋ฑ์ค๋ฅผ for ๋ฌธ์ผ๋ก ์ํํ๋ฉฐ ์ ํ์ ์์๋ผ๋ฆฌ ๋์ ๋น๊ต๋ฅผ ํ๋ค.
ํ์์ ์์๊ฐ ๋ ํฌ๋ค๋ฉด, ํ์์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ dp ๋ฐฐ์ด์ ๊ฐ์ ์ ๋ฐ์ดํธ ํด์ฃผ๋๋ฐ, ์ ์์ dp ๊ฐ ๋ณด๋ค 1์ ์ถ๊ฐํ์ฌ ๋น๊ตํ ์ ์๋ค. ์ด ๋ max() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ dp[i] ์ ๊ฐ์ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
๋ค๋ฅธ ์ ๋ต ์ฝ๋ (์๋ ๋น ๋ฆ)
def sol(N, seq):
result = [seq[0]]
index = 0
for i in range(1, N):
if result[index] > seq[i]:
result.append(seq[i])
index += 1
else:
for j in range(index + 1):
if result[j] <= seq[i]:
result[j] = seq[i]
break
index += 1
return index
if __name__ == "__main__":
N = int(input())
seq = list(map(int, input().split()))
print(sol(N, seq))
'๐ฑ Algorithm > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 11055 ํ์ด์ฌ (0) | 2022.01.23 |
---|---|
๋ฐฑ์ค 1912 ํ์ด์ฌ (0) | 2022.01.20 |
๋ฐฑ์ค 12852 ํ์ด์ฌ (1) | 2022.01.12 |
๋ฐฑ์ค 2293 ํ์ด์ฌ (0) | 2022.01.09 |
๋ฐฑ์ค 1699 ํ์ด์ฌ (0) | 2022.01.07 |