0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾아내어 그 길이를 출력하는 프로그램을 작성하라.
예를 들어 수열 1 2 2 4 4 5 7 7 2 의 경우에는 1≤2≤2≤4≤4≤5≤7≤7 이 가장 긴 구간이 되므로 그 길이 8을 출력한다. 수열 4 1 3 3 2 2 9 2 3 의 경우에는 3≥3≥2≥2 가 가장 긴 구간이 되므로 그 길이 4를 출력한다. 또 1 5 3 6 4 7 1 3 2 9 5 의 경우에는 연속해서 커지거나 작아지는 수열의 길이가 3 이상인 경우가 없으므로 2를 출력하여야 한다.
첫째 줄에는 수열의 길이 N이 주어지고, 둘째 줄에는 N개의 숫자가 빈칸을 사이에 두고 주어진다. N은 1 이상 100,000 이하의 정수이다.
첫째 줄에 가장 긴 길이를 출력한다.
start
, end
를 이용해서 증가하다가 감소하기 시작하는 부분과 감소하다가 증가하는 부분의 길이를 구해서 최댓값을 구하려고 했다. 이것저것 넣어봤는데 됐는데 뭐가 틀린지 사실 잘 모르겠다.#include <iostream>
#include <algorithm>
using namespace std;
int arr[100000];
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin >> n;
if (n == 1) {
cout << !;
return 0;
}
for (int i = 0; i < n; i++){
cin >> arr[i];
}
int greaterCount = 0 ,lessCount = 0;
int start = 0;
bool isGreater = arr[0] <= arr[1] ? true : false;
for (int i = 1; i < n-1; i++){
if (isGreater) {
if (arr[i+1] < arr[i]) {
isGreater = false;
greaterCount = max(greaterCount, i - start + 1);
start = i;
}
}
else {
if (arr[i+1] > arr[i]){
isGreater = true;
lessCount = max(lessCount, i - start + 1);
start = i;
}
}
}
if (isGreater) greaterCount = max(greaterCount, n - start);
else lessCount = max(lessCount, n - start);
cout << max(greaterCount, lessCount);
}
#include <iostream>
#include <algorithm>
using namespace std;
int arr[100000];
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin >> n;
for (int i = 0; i < n; i++){
cin >> arr[i];
}
int maxValue = 1;;
int len = 1;
for (int i = 1; i < n; i++) {
if (arr[i] >= arr[i - 1]) len++;
else len = 1;
maxValue = max(maxValue, len);
}
len = 1;
for (int i = 1; i < n; i++) {
if (arr[i] <= arr[i - 1]) len++;
else len = 1;
maxValue = max(maxValue, len);
}
cout << maxValue;
}