Kangho_Story

[백준] 11053번 가장 긴 증가하는 부분 수열 C++ 풀이 본문

PS

[백준] 11053번 가장 긴 증가하는 부분 수열 C++ 풀이

캉호 2024. 9. 4. 15:25
728x90
반응형

알고리즘 분류

  • 다이나믹 프로그래밍

문제 설명

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50}인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.


입력 설명

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)


출력 설명

첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.


예제 입력

6
10 20 10 30 20 50

예제 출력

4

아이디어

2중 for문 내에서 현재 위치의 숫자보다 더 작은 숫자가 존재하는지 보고 존재한다면 그 개수가 내가 기록한 개수보다 큰지 비교해서 크다면 기록한다.


알고리즘

위와 동일


코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	int n, maxnum=0;
	cin>>n;
	vector<int> vec(n);
	vector<int> ans(n);
	for(int i=0; i<n; i++)
		cin>>vec[i];
	for(int i=0; i<n; i++)
	{
		ans[i] = 1;
		for(int j=0; j<i; j++)
			if(vec[j] < vec[i])
				ans[i] = max(ans[i], ans[j]+1);
	}
	for(auto &i : ans)
		maxnum = max(maxnum,i);
	cout<<maxnum;
	return 0;
}

후기

문제 링크 -> https://www.acmicpc.net/problem/11053

DP를 이런 방식으로 사용한 적이 거의 없어서 새로웠다.

간단하고 좋은 방식인 것 같다.


본 블로그의 모든 글은 개인적인 학습 내용이므로 다양한 오류가 있을 수 있습니다.

오류를 발견하신다면 해당 내용 댓글로 알려주시면 감사하겠습니다!

728x90
반응형
Comments