[Programmers] 정수 삼각형(Python) / Dynamic Programming
코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr # 14분 소요 사용 알고리즘 : Dynamic Programming(동적 계획법) (가장 아래 행-1) 행부터 가장 아래 행의 값들을 참고해 더 큰 값을 선택해 더하면서 현 위치 값을 갱신해 올라온다. 가장 상단 행까지 값을 모두 채우면 첫 값(triangle[0][0])을 리턴한다. 파이썬 코드는 다음과 같다. def solution(triangle): for r in range(len(triangle)-2, -1, -1): for c in range(r+1): triangle[r][c] += max(triangle[r+1][c], ..
2021. 5. 3.
[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.