티스토리 뷰
https://www.acmicpc.net/problem/2491
2491번: 수열
0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾
www.acmicpc.net
1. 접근 풀이
- 연속해서 커지는/작아지는 수열 개수를 저장할 increase / decrease 리스트 2개가 필요하다.
각 리스트에 연속해서 커지고 / 작아지고 있는 수열의 개수를 누적해서 저장한다.
예를 들어 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾아내는 과정은 이러하다. 입력 받은 수열의 첫 번째 숫자인 4는 일단 1개로 카운트한다. 두 번째 숫자 1은 4보다 작으므로, 연속해서 작아지는 수열의 길이는 현재 2가 됐다. 그러나 세 번째 숫자 3은 이전 숫자인 1보다 크므로, 더 이상 연속해서 작아지고 있지 않다. 따라서 세 번째 숫자부터는 새로운 수열이 시작됐다고 간주하고 1로 초기화한다. 이 과정을 끝까지 반복한 이후에 decrease 내 가장 큰 숫자를 뽑아내면 그것이 바로 가장 긴 연속해서 작아지는 (같은 것 포함) 수열 중 가장 긴 수열의 길이이다.
최종 정답은 increase의 가장 긴 수열의 길이와 decrease의 가장 긴 수열의 길이를 서로 비교하여 둘 중 더 큰 값이 된다.
2. 정답 코드
n = int(input())
data = list(map(int, input().split()))
increase = [0] * n
decrease = [0] * n
increase[0] = 1
decrease[0] = 1
for i in range(1, n):
increase[i] = increase[i - 1] + 1 if data[i - 1] <= data[i] else 1
decrease[i] = decrease[i - 1] + 1 if data[i - 1] >= data[i] else 1
print(max(max(increase), max(decrease)))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 9095번 1, 2, 3 더하기 파이썬 풀이 (0) | 2023.08.18 |
---|---|
[백준] 1541번 잃어버린 괄호 파이썬 풀이 (0) | 2023.08.17 |
[백준] 14916번 거스름돈 파이썬 풀이 (0) | 2023.08.15 |
[백준] 1991번 트리 순회 파이썬 풀이 (0) | 2023.08.14 |
[백준] 16925번 배열 돌리기 1 파이썬 풀이 (0) | 2023.08.14 |