[C++][백준 2491] 수열

PublicMinsu·2024년 1월 15일

문제

접근 방법

연속하는 수열의 최대 길이를 구하는 것이다.
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번 탐색해서 길이를 세어주는 방식으로 해결했다.

profile
연락 : publicminsu@naver.com

0개의 댓글