๐น ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
1. ๋ฌธ์ ๋งํฌ
11054๋ฒ: ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
2. ์ฝ๋
Python3
31120KB
272ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
N = int(input())
A = list(map(int, input().split()))
in_dp = [0 for _ in range(N)]
de_dp = [0 for _ in range(N)]
# ์ฆ๊ฐ ์์ด dp
for i in range(N):
for j in range(i):
if A[i] > A[j]:
in_dp[i] = max(in_dp[i], in_dp[j] + 1)
# ๊ฐ์ ์์ด dp
for i in range(N-1, -1, -1):
for j in range(N-1, i, -1):
if A[i] > A[j]:
de_dp[i] = max(de_dp[i], de_dp[j] + 1)
print(max([in_dp[i] + de_dp[i] for i in range(N)])+1)
3. ํด์ค
k๋ฒ์งธ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์ฆ๊ฐํ๋ ์์ด, ์ค๋ฅธ์ชฝ์ ๊ฐ์ํ๋ ์์ด๋ก ๋๋์ด (์ฆ๊ฐํ๋ ์์ด + ๊ฐ์ํ๋ ์์ด)์ ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋๋ค.
์ฆ๊ฐ ์์ด dp์ ๊ฐ์ ์์ด dp ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํํ ํ ๊ฐ๊ฐ ๊ตฌํด์ค๋ค.
์ฆ๊ฐํ๋ ์์ด์์ dp[i]๋ i๋ฒ์งธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์ฆ๊ฐํ๋ ์์ด์ ์ต๋ ํฌ๊ธฐ์ด๋ค. ๊ฐ์ํ๋ ์์ด์์ dp[i]๋ i๋ฒ์งธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ ๊ฐ์ํ๋ ์์ด์ ์ต๋ ํฌ๊ธฐ์ด๋ค.
ํฉ์ ์ต๋๊ฐ์ ๊ตฌํ๊ณ ๋ ํ k๋ฒ์งธ ์ซ์๊น์ง 1์ ๋ํด์ค๋ค.
This post is licensed under CC BY 4.0 by the author.