PS/백준 [백준/12738] 가장 긴 증가하는 부분 수열 3 (Python) - Problem : 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 Difficulty : Gold 2 Status : Solved Time : 00:05:11 문제 설명 더보기 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 및 출력 더보기 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 입력 예시 6 10 20 10 30 20 50 출력 예시 4 풀이 오랜만에 놀러온 골드 2 문제. 풀이는 아래와 같이 DP와 lower bound를 이용하면 된다. O(NlogN)으로 풀 수 있다. 2023.09.19 - [알고리즘 문제/백준] - [백준/11722] 가장 긴 감소하는 부분 수열 (Python) [백준/11722] 가장 긴 감소하는 부분 수열 (Python) Problem : https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, magentino.tistory.com 풀이 코드 N = int(input()) num_list = list(map(int, input().split())) stk = list() def lower_bound(val) : start, end = 0, len(stk) while start < end : mid = (start + end) // 2 if val > stk[mid] : start = mid + 1 else : end = mid return end for n in num_list : idx = lower_bound(n) if idx == len(stk) : stk.append(n) else : stk[idx] = n print(len(stk)) 풀이 완료! 공유하기 게시글 관리 마젠티노's 저작자표시 비영리 동일조건 'PS > 백준' 카테고리의 다른 글 [백준/13308] 주유소 (Python) (1) 2024.01.01 [백준/18227] 성대나라의 물탱크 (Python) (1) 2023.12.31 [백준/16404] 주식회사 승범이네 (Python) (1) 2023.12.28 [백준/13548] 수열과 쿼리 6 (Python) (1) 2023.12.28 [백준/2912] 백설공주와 난쟁이 (Python) (1) 2023.12.27 Contents 당신이 좋아할만한 콘텐츠 [백준/13308] 주유소 (Python) 2024.01.01 [백준/18227] 성대나라의 물탱크 (Python) 2023.12.31 [백준/16404] 주식회사 승범이네 (Python) 2023.12.28 [백준/13548] 수열과 쿼리 6 (Python) 2023.12.28 댓글 0 + 이전 댓글 더보기