๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold4] 11054๋ฒˆ_๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

Dbswnstjd 2023. 5. 9. 10:38

๋ฌธ์ œ

https://www.acmicpc.net/problem/11054

 

11054๋ฒˆ: ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ˆ˜์—ด A๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 11054๋ฒˆ ๋ฌธ์ œ - ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด
n = int(input())
arr = list(map(int, input().split()))

dp_increase = [1] * (n)
dp_decrease = [1] * (n)
for i in range(1, n):
    for j in range(i):
        if arr[i] > arr[j] and dp_increase[i] <= dp_increase[j]:
            dp_increase[i] = dp_increase[j] + 1
for i in range(n-1, -1, -1):
    for j in range(i, n):
        if arr[i] > arr[j] and dp_decrease[i] <= dp_decrease[j]:
            dp_decrease[i] = dp_decrease[j] + 1

for i in range(n):
    dp_increase[i] = dp_increase[i] + dp_decrease[i] - 1
print(max(dp_increase))

LIS ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ ๊ฒฝ์šฐ๋ฅผ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด๊ณผ ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.