์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Python

[BOJ/Step15] 11054 : ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด (Python)

NaNaRin๐Ÿ™ƒ 2021. 2. 26. 21:20

www.acmicpc.net/problem/11054

 

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))