본문 바로가기

LIS

(4)
C++ 백준 14003 (가장 긴 증가하는 부분수열5) 백준 14003 (가장 긴 증가하는 부분수열5) https://www.acmicpc.net/problem/14003 14003번: 가장 긴 증가하는 부분 수열 5 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net LIS의 길이와 수열을 O(N*logN)안에 해결해야 하는 문제이다. LIS에 대한 기본이해와 O(N^2)의 시간으로 길이와 수열을 찾는 법, 그리고 O(N*logN)의 시간으로 LIS의 길이만을 찾는 방법은 아래에 있으니 반드시 모두 이해하고 이 글을 읽도록 한다. 1. LIS의 길이를 O(N^2)으로 구하는 방법 :..
C++ 백준 14002 (가장 긴 증가하는 부분수열4) 백준 14002 (가장 긴 증가하는 부분수열4) https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이 문제는 LIS의 길이 뿐만 아니라 LIS수열 중 하나를 출력하는 문제이다. 이 문제를 풀기에 앞서 LIS의 기본특성과 그 길이를 구하는 방법을 알아야 한다. 1. LIS의 길이를 O(N^2)으로 구하는 방법 : 여기(링크) 2. LIS의 길이를 O(N*log(N))..
LIS(Longest Increasing Subsequence - 최장 증가 수열) 알고리즘 (2) LIS(Longest Increasing Subsequence - 최장 증가 수열) (2) https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net !본 글에서는 최장 증가 수열의 길이만 구한다. 수열에 포함된 수는 다양한 방법을 통해 얻을 수 있다! 가장 긴 증가하는 부분수열(이하 LIS)의 길이를 찾기위한 기본적인 알고리즘 설명은 여기(링크) 있다. 이전글에서 LIS의 길이를 구하기 위해 O(N^2)만큼의 시간이 소요된다고 했었다. 본 글에서는 이를..
LIS(Longest Increasing Subsequence - 최장 증가 수열) 알고리즘 (1) LIS(Longest Increasing Subsequence - 최장 증가 수열) (1) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net !본 글에서는 최장 증가 수열의 길이만 구한다! 또한 본글에서 설명하는 알고리즘의 시간복잡도는 O(N^2)이므로 매우 느리다. 크기가 작은 배열에서 간단한 아이디어로 구현을 하고싶을 때 사용하기 바람. 1. LIS의 길이와 수열을..