개발 연습장/백준 문제풀이

[파이썬, Python] 백준 2491: 수열

LooanCheong 2023. 5. 26. 11:05
반응형

문제

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

 

2491번: 수열

0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾

www.acmicpc.net

코드

n = int(input())
num = list(map(int, input().split()))
dp1 = [1 for i in range(n)]
dp2 = [1 for i in range(n)]

for i in range(1, n):
    if num[i] <= num[i-1]:
        dp1[i] = max(dp1[i], dp1[i-1] + 1)
    if num[i] >= num[i-1]:
        dp2[i] = max(dp2[i], dp2[i-1] + 1)

print(max(max(dp1), max(dp2)))

설명

dp 리스트를 2개를 만들어주어 하나는 감소를 카운트하고 하나는 증가를 카운트한다.

주의사항은 이전의 값이 같은 경우에는 양쪽 리스트 모두에 결괏값을 처리해주어야 한다.

각 리스트는 1을 n개만큼 만들어서 관리했는데,
자기 자신만이 연속되어도 최솟값은 1이기 때문이다.

이전의 수와 비교하여 더 크다면 증가하는 리스트의 dp를 이전 값과 비교하여 1 혹은 이전 값에 1을 더한 수로,
반대의 경우도 똑같이 처리해주고
결괏값을 출력할 때는 양쪽 리스트를 모두 비교하여 가장 큰 수를 출력한다.

반응형