[๋ฐฑ์ค€/python] 11054๋ฒˆ : ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด

2021. 4. 13. 01:24

๋ฌธ์ œ

์ˆ˜์—ด S๊ฐ€ ์–ด๋–ค ์ˆ˜ Sk๋ฅผ ๊ธฐ์ค€์œผ๋กœ S1 < S2 < ... Sk-1 < Sk > Sk+1 > ... SN-1 > SN์„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด, ๊ทธ ์ˆ˜์—ด์„ ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, {10, 20, 30, 25, 20}๊ณผ {10, 20, 30, 40}, {50, 40, 25, 10} ์€ ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด์ง€๋งŒ,  {1, 2, 3, 2, 1, 2, 3, 2, 1}๊ณผ {10, 20, 30, 40, 20, 30} ์€ ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด ์•„๋‹ˆ๋‹ค.

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด๋ฉด์„œ ๊ฐ€์žฅ ๊ธด ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ •๋‹ต

import sys
input = sys.stdin.readline

N = int(input())
A = list(map(int, input().split()))

inc = [1] * N
dec = [1] * N

for i in range(N):
    for j in range(i):
        if A[i] > A[j] and inc[i] <= inc[j]:
            inc[i] = 1 + inc[j]

for i in range(N-1, -1, -1):
    for j in range(N - 1, i, -1):
        if A[i] > A[j] and dec[i] <= dec[j]:
            dec[i] = 1 + dec[j]

answer = [sum(s)-1 for s in zip(inc, dec)]
print(max(answer))

์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ณ  ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค. 

inc์—๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๊ณ 

dec์—๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค.

dec์˜ ๊ฒฝ์šฐ ๋ฐ”๊ฟ”๋งํ•˜๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, {1, 3, 5}์˜ ์ˆ˜์—ด์—์„œ 5์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€

{1, 5}, {3, 5}, {1, 3, 5}๊ฐ€ ์žˆ๋‹ค.

์ด ์ค‘ {1, 3, 5}์˜ ๊ธธ์ด๊ฐ€ ๋” ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— 5์˜ ์ธ๋ฑ์Šค 2 ์ฆ‰, inc[2]์— 3์ด ์ €์žฅ๋œ๋‹ค.

 

inc๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ์™€ dec๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ์ค‘์ฒฉ for๋ฌธ์„ 2๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

for i in range(N):
    for j in range(i):
        if A[i] > A[j] and inc[i] <= inc[j]:
            inc[i] = 1 + inc[j]

inc๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ์ž‘์€ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

A[i]์— ๋„๋‹ฌํ•˜๊ธฐ์œ„ํ•ด 0๋ถ€ํ„ฐ i-1๊นŒ์ง€์˜ ์ธ๋ฑ์Šค j๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

inc์—๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ€๋Š” ์ธ๋ฑ์Šค ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’์ด ๋‹ด๊ฒจ์žˆ๋‹ค.

A[j]๊ฐ€ A[i]๋ณด๋‹ค ์ž‘์•„์•ผ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์™„์„ฑ๋˜๊ณ  inc[j]๊ฐ€ inc[i]๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ๊ฐ€์žฅ ๋งŽ์ด ๊ฑฐ์ณ๊ฐ€๋ฏ€๋กœ

ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ inc[i]์— j์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ„ ์ธ๋ฑ์Šค ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’ inc[j]์— 1์„ ๋”ํ•œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋”ํ•˜๋Š” 1์€ A[i]๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

for i in range(N-1, -1, -1):
    for j in range(N - 1, i, -1):
        if A[i] > A[j] and dec[i] <= dec[j]:
            dec[i] = 1 + dec[j]

dec๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๊พธ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋œ๋‹ค.

 

answer = [sum(s)-1 for s in zip(inc, dec)]
print(max(answer))

inc์™€ dec์—๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ€๋Š” ์ธ๋ฑ์Šค์˜ ์ตœ๋Œ€๊ฐœ์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์œผ๋ฏ€๋กœ

๊ฐ™์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ ๋”ํ•ด์ฃผ๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ฐ€๋Š” ์ธ๋ฑ์Šค ๊ฐœ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

zip์„ ์ด์šฉํ•˜์—ฌ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ ๋”ํ•ด์ฃผ๊ณ  1์„ ๋นผ answer์— ์ €์žฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ 1์„ ๋นผ์ฃผ๋Š” ์ด์œ ๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋„์ฐฉํ–ˆ์„ ๋•Œ๋ฅผ inc์™€ dec์—์„œ ๊ฐ๊ฐ ํ•œ๋ฒˆ์”ฉ ์„ธ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฆฌ์ŠคํŠธ answer์˜ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

728x90

BELATED ARTICLES

more