현재 끝나는 구간과 전체 최장을 나눠요
이전 레슨의 최고값은 원소 한 개였어요. 이번에는 바로 이웃한 값들이 계속 증가하는 구간을 읽어요. {2,5,7,1}에서 앞 세 값은 증가하지만 7에서 1로 갈 때 끊겨요.
length를 ‘지금 위치에서 끝나는 증가 구간 길이’, best를 ‘지금까지 본 최장 길이’로 정해요. 같은 값도 엄격한 증가가 아니므로 구간을 끊어요.
끊긴 뒤에도 현재 값은 새 시작이에요
| 값 | 바로 앞보다 큰가요? | length | best |
|---|---|---|---|
| 2 | 첫 원소 | 1 | 1 |
| 5 | 예 | 2 | 2 |
| 7 | 예 | 3 | 3 |
| 1 | 아니요 | 1 | 3 |
| 3 | 예 | 2 | 3 |
끊길 때 length는 0일까요, 1일까요? 현재 값 하나의 구간이 새로 시작하므로 1이에요. best까지 1로 되돌리면 앞에서 찾은 길이 3을 잃어요. <algorithm>의 max는 두 후보 중 큰 값을 고를 때 쓸 수 있어요.
직접 풀어봐요
values에서 원소들이 연속한 위치에 있고 바로 다음 값이 항상 더 큰 구간의 최대 길이를 반환해요. 떨어진 값을 골라 연결할 수 없어요. 빈 vector는 0, 원소 한 개는 1을 반환해요.
길이는 0100, 원소는 −10001000이에요. 실행용 입력은 n과 다음 줄의 n개 값, 출력은 반환값이에요. 하네스가 입력·출력을 처리해요.
예시 1: values={1,4,6,2,3} → 3. 앞의 1·4·6이 길이 3인 증가 구간이에요.
예시 2: values={9,7,5} → 1. 두 값짜리 증가가 없어 길이 1이에요.
예시 입력
5 1 4 6 2 3
예상 결과
3
예시 입력
3 9 7 5
예상 결과
1
핵심 개념
stl-vector: 현재 증가 구간 길이와 전체 최장 길이를 분리해요.