11054๋ฒ: ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๊ณ , ๋์งธ ์ค์๋ ์์ด A๋ฅผ ์ด๋ฃจ๊ณ ์๋ Ai๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด์ ์ ๋ฌธ์ 11053๋ฒ๊ณผ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅด๋ค
๊ทธ๋ฅ ์์ชฝ์ผ๋ก ๊ณ์ฐํด์ฃผ๋ฉด ๋๋ค
k๊ฐ ์์๋ฅผ ๊ฐ์ง ์์ด
= n๋ฒ์งธ ์ซ์ ๊ธฐ์ค์ผ๋ก 0~n๊น์ง ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด + n~k-1๊น์ง ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด - 1
๊ฐ์ํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์
์์ด์ ๋ค์ง์ด์ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ ํ ๋ค์ ๋ค์ง์ผ๋ฉด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด์ด ๋๋ค
1. ์ ๋ ฅ๋ฐ์ ์๋ค์ ๋ฆฌ์คํธ seq_1์ ์ ์ฅ, seq_1์ ๋ณต์ฌํ์ฌ seq_2์ ์ ์ฅ, ๋ค์ง์ด์ค๋ค
2-1. seq_1์ ๊ฐ์ ๊ธธ์ด์ t_seq_1์ ์์ฑํ๊ณ ์ฒซ๋ฒ์งธ ์์๋ 1, ๋๋จธ์ง๋ 0์ผ๋ก ์ฑ์ด๋ค
=> seq_1[n]๊น์ง์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ๋ฆฌ์คํธ t_seq_1[n]์ ์ ์ฅํ ๊ฒ
2-2. seq_2์ ๊ฐ์ ๊ธธ์ด์ t_seq_2์ ์์ฑํ๊ณ ์ฒซ๋ฒ์งธ ์์๋ 1, ๋๋จธ์ง๋ 0์ผ๋ก ์ฑ์ด๋ค
=> seq_2[n]๊น์ง์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ๋ฆฌ์คํธ t_seq_2[n]์ ์ ์ฅํ ๊ฒ
3. for๋ฌธ์ผ๋ก t_seq_1[1] ~ t_seq_1[n-1] / t_seq_2[1] ~ t_seq_2[n-1] ๊น์ง ๊ณ์ฐ
3-1. ๋ฆฌ์คํธ a, b์ 0์ ์ ์ฅ
3-2. for๋ฌธ์ผ๋ก a์ seq_1[0] ~ seq_1[n-1] ์ค seq_1[n]๋ณด๋ค ์์ ์ซ์๋ค์ t_seq_1[n]์ ์ ์ฅ
for๋ฌธ์ผ๋ก b์ seq_2[0] ~ seq_2[n-1] ์ค seq_2[n]๋ณด๋ค ์์ ์ซ์๋ค์ t_seq_2[n]์ ์ ์ฅ
3-3. a์ ์ต๋๊ฐ + 1์ t_seq_1[n]์ ์ ์ฅ / b์ ์ต๋๊ฐ + 1์ t_seq_2[n]์ ์ ์ฅ
4. t_seq_2๋ฅผ ๋ค์ง๋๋ค
5. t_seq์ t_seq_1 + t_seq_2 -1 ์ ์ ์ฅํ๋ค
6. t_seq์ ์ต๋๊ฐ์ ์ถ๋ ฅ
์ธ๋ถ ์ค๋ช ์ 11053๋ฒ
# 11054.py
n = int(input())
seq_1 = [i for i in map(int, input().split())]
t_seq_1 = [1] + [0 for _ in range(n-1)]
seq_2 = [i for i in seq_1]
seq_2.reverse()
t_seq_2 = [1] + [0 for _ in range(n-1)]
for i in range(1, n):
a = [0]
b = [0]
for j in range(i):
if seq_1[j] < seq_1[i]:
a.append(t_seq_1[j])
if seq_2[j] < seq_2[i]:
b.append(t_seq_2[j])
t_seq_1[i] = max(a) + 1
t_seq_2[i] = max(b) + 1
t_seq_2.reverse()
t_seq = [t_seq_1[i] + t_seq_2[i] - 1 for i in range(n)]
print(max(t_seq))