백준 / 2491 / 수열

6951 단어 python백준DPDP

Question

문제링크
Silver 4

Logic

기본 구조 : dp
1. dp 리스트 안에 네 가지 수를 둔다.

  • a.연속증가하는 현재 값
  • b.연속증가하는 최대값
  • c.연속감소하는 현재 값
  • d.연속감소하는 최대값
  1. 한 수씩 앞 수와 비교한다(첫 숫자의 경우 같은 수를 둔다.)
    3-1. 앞 수보다 크다면 : a 증가, b 값 최신화, c 초기화(1)
    3-2. 같다면 : a,c 증가, b,d값 최신화
    3-3. 작다면 : a 초기화, c 증가, d 값 최신화

Code

from gettext import dpgettext
from sys import stdin
N = int(stdin.readline().rstrip())
data = list(map(int,stdin.readline().rstrip().split()))
dp=[0,0,0,0]
prev = data[0]
for s in data:
    if prev < s: 
        dp[0] += 1
        dp[1] = max(dp[1],dp[0])
        dp[2] = 1
    elif prev == s:
        dp[0] += 1
        dp[1] = max(dp[1],dp[0])
        dp[2] += 1
        dp[3] = max(dp[3],dp[2])
    else : 
        dp[0] = 1
        dp[2] += 1
        dp[3] = max(dp[3],dp[2])
    prev=s
print(max(dp[1],dp[3]))

좋은 웹페이지 즐겨찾기