[๋ฐฑ์ค/python] 11054๋ฒ : ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
๋ฌธ์
์์ด 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์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 2798๋ฒ : ๋ธ๋์ญ (0) | 2021.04.13 |
---|---|
[๋ฐฑ์ค/python] 2579๋ฒ : ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2021.04.13 |
[๋ฐฑ์ค/pypy3] 9663๋ฒ : N-Queen (0) | 2021.04.12 |
[๋ฐฑ์ค/python] 15650๋ฒ : N๊ณผ M (0) | 2021.04.11 |
[๋ฐฑ์ค/python] 2667๋ฒ : ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (0) | 2021.04.07 |