๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 11054 ํŒŒ์ด์ฌ - ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด - ๋™์  ๊ณ„ํš๋ฒ•, LIS

by ๐ŸŒปโ™š 2021. 10. 15.

๋ฐฑ์ค€ 11054 ํŒŒ์ด์ฌ

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

 

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

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

www.acmicpc.net

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ด์ „์— ํ’€์—ˆ๋˜ [CS/์•Œ๊ณ ๋ฆฌ์ฆ˜] - ๋ฐฑ์ค€ 11053 ํŒŒ์ด์ฌ - ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด - ๋™์  ๊ณ„ํš๋ฒ•, LIS ๋ฌธ์ œ์˜ ์‘์šฉ์ด๋‹ค. ๋ฐ”์ดํ† ๋‹‰ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๊ณ  ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด๋‹ค. ์ฆ‰ ์ด์ „์— ํ’€์—ˆ๋˜ LIS ๋ฌธ์ œ์—์„œ ๋ฐฐ์—ด์˜ ๊ฐ ์œ„์น˜์—์„œ์˜ ์ตœ๋Œ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด๊ณผ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋ฐฐ์—ด 2๊ฐ€์ง€๋ฅผ ๊ตฌํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

Python ํ’€์ด

import sys
read = sys.stdin.readline

N = int(read())
A = list(map(int, read().split()))
forward = [0] * N
backward = [0] * N

def calc(reverse=False):
    if reverse:
        temp = [A[-1]]
        seq = backward
        r = range(N-1, -1, -1)
    else:
        temp = [A[0]]
        seq = forward
        r = range(N)

    for i in r:
        if temp[-1] < A[i]:
            temp.append(A[i])
        else:
            idx = 0
            for j in range(len(temp)):
                if temp[j] < A[i]:
                    idx += 1
                else:
                    temp[idx] = A[i]
                    break
        seq[i] = len(temp)

calc()
calc(True)

res = -1
for i in range(N):
    res = max(res, forward[i] + backward[i])
print(res-1)
  • calc ํ•จ์ˆ˜๋Š” LIS๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
    • reverse flag๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์„ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ˆœํšŒํ•ด์„œ ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ๊ฐ ์ฆ๊ฐ€ํ•˜๊ณ  ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ณ  ๊ฐ™์€ ์œ„์น˜์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’ ์ค‘ ์ตœ๋Œ€๊ฐ’์ด ๊ฐ€์žฅ ๊ธด ๋ฐ”์ดํ† ๋‹‰ ์ˆ˜์—ด์ด ๋œ๋‹ค.
  • ์œ„์น˜๊ฐ€ ๊ฒน์ณ ์ค‘๋ณต๋˜๋Š” 1์„ ๋นผ์ค˜์•ผํ•œ๋‹ค.

๋Œ“๊ธ€