티스토리 뷰

백준/실버

[백준 2491번] 수열 (C++)

게임개발기원 2023. 2. 6. 01:18

문제링크 : https://www.acmicpc.net/problem/2491

 

#include <bits/stdc++.h> 
using namespace std;

int n, k, result = 0;
int arr[100001], dp[100001], dp2[100001];

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
		dp[i] = dp2[i] = 1;
	}

	for (int i = 1; i < n; i++)
	{
		if (arr[i] >= arr[i-1])    //값이 연속해서 커지는 경우
		{
			dp[i] = max(dp[i], dp[i - 1] + 1);
		}
		if (arr[i] <= arr[i - 1])  //값이 연속해서 작아지는 경우
		{
			dp2[i] = max(dp2[i], dp2[i - 1] + 1);
		}
	}
	sort(dp, dp + 100001);
	sort(dp2, dp2 + 100001);
	cout << max(dp[100000], dp2[100000]);  //각 dp 배열에서 가장 큰 값을 출력
}

연속해서 커지는 경우, 연속해서 작아지는 경우 2가지를 각각 계산하여 이 중에서 큰 값을 출력한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함