문제링크 : https://www.acmicpc.net/problem/11568
11568번: 민균이의 계략
민균이는 요즘 준민이를 놀리는 일에 재미가 들렸다. 오늘도 그는 준민이를 놀리기 위해 한가지 재미있는 아이디어를 떠올렸다. 그는 하나의 정수가 쓰여 있는 카드 N장을 준비하여 준민이에게
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int N, result;
int arr[1001], dp[1001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for(int i=0; i<N; i++)
{
cin >> arr[i];
dp[i]=1; //초기 길이는 1
}
for(int i=0; i<N; i++)
{
for(int j=0; j<i; j++)
{
if(arr[i] > arr[j]) dp[i] = max(dp[i], dp[j]+1); //길이 갱신
}
result = max(result, dp[i]); //최대값 갱신
}
cout << result;
return 0;
}
가장 긴 증가하는 부분 수열을 찾는 문제이다.
이런 류의 문제가 제법 있는 편인데, 가장 기본적인 형태의 문제인 것 같다.
초기 dp를 1로 갱신하여 초기 길이를 1로 설정해주고, 처음 위치 ~ 현재 위치 (i) 를 탐색하여 현재 위치의 값이 더 클때마다 dp 길이를 갱신해주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 14248번] 점프 점프 (C++) (0) | 2023.12.10 |
---|---|
[백준 12026번] BOJ 거리 (C++) (0) | 2023.12.08 |
[백준 15489번] 파스칼 삼각형 (C++) (0) | 2023.12.04 |
[백준 17175번] 피보나치는 지겨웡~ (C++) (0) | 2023.12.03 |
[백준 8394번] 악수 (C++) (0) | 2023.12.01 |