[BOJ] 11053. 가장 긴 증가하는 부분 수열(Python) / DP
www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net LIS(Longest Increasing Subsequence, 최장 증가 부분 수열 문제)는 가장 전형적인 Dynamic Programming 문제! 수열의 크기가 N일 때, 기본적인 DP 알고리즘으로 시간 복잡도 O(N^2)으로 해결할 수 있다. dp[i] = array[i]를 마지막 원소로 가지는 부분수열의 최대 길이 모든 0
2021. 3. 4.
[BOJ] 9095. 1, 2, 3 더하기(Python) / DP
www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 처음에 combination으로 풀려다가 숫자를 자세히 보니 규칙성 발견 => DP로 접근해보자 4번째 수 이후로 이전의 세 수의 합의 값을 가짐. n은 10까지 수를 가지므로 미리 리스트로 만들어놓는다. 인덱스에 해당하는 값을 찾아 간단하게 풀 수 있는 문제. 파이썬 코드는 다음과 같다. import sys input = sys.stdin.readline dp = [1, 2, 4] for i in range(3, 12): dp.append(dp[i-3]+dp[i-2]+dp[i-1]) # print(dp) n..
2021. 3. 4.