티스토리 뷰

알고리즘/C++

[C++] 연속 부분 증가 수열

지휘리릭 2020. 2. 24. 15:44

N개의 숫자가 나열된 수열이 주어집니다.

이 수열 중 연속적으로 증가하는 부분 수열을 최대길이를 구하여 출력하는 프로그램을 작성하세요.

 

#include<stdio.h>

int main() {
	int n, i, cnt = 1, max = 1, pre, now;
	scanf("%d", &n);

		// 맨 처음 값은 먼저 입력받고 그 다음 입력이 들어올 때마다 이전의 값과 비교.
	scanf("%d", &pre);
	for (i = 1; i < n; i++) { 
		scanf("%d", &now); 
		if (pre <= now) {
			cnt++;
			if (max < cnt) max = cnt;
		}
		else cnt = 1;
		pre = now;
	}
	printf("%d", max);
}

n개의 값이 들어오면서 값이 점점 증가되는 부분의 길이가 가장 긴 값을 찾아야 한다.

배열을 선언하고 그 안에 값을 넣고 또 for문을 돌려서 길이를 구할 수도 있지만, 가능한 입력받고 바로 판별할 수 있으면 더 좋다. 새로운 값이 들어올 때마다 이전의 값과 비교한다.

 

맨 처음 값은 pre에 입력 받는다. 그 다음부터 값을 now에 입력 받는다.

now 와 pre를 비교했을 때, now가 더 크다면 증가수열이 시작되는 것이므로 카운팅한다. 그리고 동시에 카운팅하는 갑서이랑 최대값을 비교해서 최대값이 계속해서 갱신될 수 있도록 한다.

 

댓글