반응형
가장 긴 증가하는 부분수열 문제는 백준 사이트에서 자주 접할 수 있는 문제입니다. 이 알고리즘을 잘 이해하면, 풀 수 있는 문제들이 많이 있습니다.
증가하는 부분수열 중 하나를 출력하라면 조금 골치가 아프겠지만, 현재 이 알고리즘을 이용해서 부분수열도 출력할 수 있습니다.
https://www.acmicpc.net/problem/2352
반도체에서 서로 라인이 겹치지 않도록 설계하는 것은 중요한 문제입니다. 실제로는 다층기판을 이용하기 때문에 라인이 겹쳐도 상관이 없지만, 단면기판을 사용한다면, 좀 고려가 필요합니다.
가장 긴 증가하는 부분수열 알고리즘을 설명하는 게시물은 아래를 참고해주시길 바랍니다. 문제의 유형도 거의 같습니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #2352 - Semiconductor Design
// - by Aubrey Choi
// - created at 2019-07-10
//------------------------------------------------
#include <stdio.h>
#include <algorithm>
int main()
{
int n, s, cur = 0;
static int dp[40001];
scanf("%d", &n);
while(n--)
{
scanf("%d", &s);
if(cur == 0 || dp[cur - 1] < s) dp[cur++] = s;
else
{
int *p = std::lower_bound(dp, dp + cur, s);
*p = s;
}
}
printf("%d\n", cur);
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2367 파티(포드-폴커슨 알고리즘) (0) | 2023.04.28 |
---|---|
[C/C++] 백준 #2357 최솟값과 최댓값(세그먼트 트리) (0) | 2023.04.27 |
[C/C++] 백준 #2346 풍선 터뜨리기(데크 자료구조) (0) | 2023.04.27 |
[C/C++] 백준 #2331 반복수열(구현) (0) | 2023.04.26 |
[C/C++] 백준 #2316 도시 왕복하기 2(포드-폴커슨 알고리즘) (0) | 2023.04.25 |
댓글