
연속하는 수열의 최대 길이를 구하는 것이다.
N이 10만이기에 2번 탐색해도 문제가 없다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> nums;
int N, answer, cnt = 1;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
nums = vector<int>(N);
for (int &num : nums)
{
cin >> num;
}
for (int i = 0; i < N - 1; ++i)
{
if (nums[i] <= nums[i + 1]) // 연속해서 커지는 수열
{
++cnt;
}
else
{
answer = max(answer, cnt);
cnt = 1;
}
}
answer = max(answer, cnt);
cnt = 1;
for (int i = 0; i < N - 1; ++i)
{
if (nums[i] >= nums[i + 1]) // 연속해서 작아지는 수열
{
++cnt;
}
else
{
answer = max(answer, cnt);
cnt = 1;
}
}
answer = max(answer, cnt);
cout << answer;
return 0;
}
처음에는 한 번에 탐색하는 방법을 생각했지만 숫자가 같을 수 있기에 커지는 수열과 감소하는 수열의 중복되는 부분을 처리할 때 복잡해질 것 같았다.
그래서 2번 탐색해서 길이를 세어주는 방식으로 해결했다.