CodingTest Exam/[C++] Algorithm Study
23. 연속 부분 증가수열 (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★☆☆☆
HongongHB
2023. 7. 24. 13:54
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
vector<int> num(n);
for(int i = 0; i < n; i++)
scanf("%d", &num[i]);
vector<int> answer;
int start = 0;
int end = 1;
int maxCount = 0;
int count = 0;
while(end < n)
{
if(num[start] <= num[end])
{
answer.push_back(num[start]);
if(end == n-1)
{
answer.push_back(num[end]);
count = answer.size();
}
}
else
{
answer.push_back(num[start]);
count = answer.size();
answer.clear();
}
if(maxCount < count)
maxCount = count;
start++;
end++;
}
printf("%d", maxCount);
return 0;
}
1. 두 값을 비교해서 다음 값이 더 크다면 vector<int> answer 에 push_back 한다.
2. 다음 값이 더 작은 값이 나온다면 큰 값을 먼저 answer에 push_back 한 다음 size를 count에 할당하고 clear한다.
3. 반복하여 maxCount를 return한다.
!! 반례 !!
- 값이 계속해서 커지는 경우 맨 마지막 값은 answer에 포함되지 못한다.
ex) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10의 경우 9까지는 들어가지만 10은 들어가지 못한다.
따라서 end가 마지막인 n-1이 됐을 때, 이전 값보다 크다면 2번 작업을 반복한다.
첫 점수 : 80점(반례 못 찾음)