반응형
문제
https://www.acmicpc.net/problem/2491
코드
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을 더한 수로,
반대의 경우도 똑같이 처리해주고
결괏값을 출력할 때는 양쪽 리스트를 모두 비교하여 가장 큰 수를 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 1094: 막대기 (0) | 2023.05.31 |
---|---|
[파이썬, Python] 백준 1476: 날짜 계산 (0) | 2023.05.30 |
[파이썬, Python] 백준 14916: 거스름돈 (0) | 2023.05.25 |
[파이썬, Python] 백준 10825: 국영수 (0) | 2023.05.24 |
[파이썬, Python] 백준 2644: 촌수계산 (0) | 2023.05.23 |