[Python] 백준 12015번 문제, 가장 긴 증가하는 부분 수열 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 주어진 수열에서 가장 긴 증가하는 부분 수열을 구하는 문제인데 입력 크기가 1 ≤ N ≤ 1,000,000이기 때문에 DP 방식으로 풀면 n^2의 시간 복잡도를 가져 시간 초과가 발생한다. 그래서 최장 증가 부분 수열(LIS) 알고리즘을 사용해야 하며, log n이라는 시간 복잡도를 가지는데 N만큼 동작해야 하므로 최종 시간 복잡도는 NlogN이다. A는 1부터 1,000,000까지의 범위이므로 ..
[Python] 백준 12738번 문제, 가장 긴 증가하는 부분 수열 3
https://www.acmicpc.net/problem/12738 12738번: 가장 긴 증가하는 부분 수열 3 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net 가장 긴 증가하는 부분 수열 시리즈 중 세번째 문제이며, 주어진 수열에서 가장 긴 증가하는 부분을 구하는 것인데 입력의 크기가 1 ≤ N ≤ 1,000,000 이기 때문에 기존의 풀이법인 동적 프로그래밍(Dynamic Programming)을 사용한다면 n^2의 시간 복잡도를 가지기 때문에 시간 초가로 실패한다. 따라서 DP 알고리즘이 아닌 최장 증가 부분 수열(LI..
[Python] 백준 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 수열이 주어졌을 때 가장 긴 증가하는 부분 수열을 구하는 문제이며, 시리즈 중 4번째 문제이다. 전과 달라진 점은 둘째 줄에 부분 수열을 출력해야 하며, 첫째 줄은 기존과 마찬가지로 부분 수열의 길이를 출력하면 된다. 동적 프로그래밍으로 풀이 가능하기 때문에 dp를 선언 한 다음에 A의 순서대로 2차원 배열 arr를..