Post

๐Ÿน ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

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.