반응형
문제
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을 더한 수로,
반대의 경우도 똑같이 처리해주고
결괏값을 출력할 때는 양쪽 리스트를 모두 비교하여 가장 큰 수를 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, 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 |