[C++] 수열 (2491번)

https://www.acmicpc.net/problem/2491

 

2491번: 수열

0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾

www.acmicpc.net


문제풀이

하나씩 뺴먹어 버려서 틀리는 경우가 생긴다.. 초기 answer값을 1로 두고, 반복문 마지막 마다 정답 값을 갱신하도록 해주었다.

처음 값만 따로 입력받아 before에 저장한뒤, 감소 증가 길이를 저장할 변수를 선언하고 반복문을 돌며 단조증가, 단조감소에 따라 갈이를 늘려주거나 다시 1로만들어주면 간단하게 구현이 가능하다.

 

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;

    int before;
    cin >> before;
    int bigger_len = 1, smaller_len = 1;
    int answer = 1;
    for(int i=1; i<n; i++) {
        int tmp;
        cin >> tmp;

        // 단조 감소
        if(before >= tmp) smaller_len++;
        else smaller_len = 1;

        // 단조증가
        if(before <= tmp) bigger_len++;
        else bigger_len = 1;

        answer = max(bigger_len, answer);
        answer = max(smaller_len, answer);
        before = tmp;
    }

    cout << answer;
    return 0;
}