DP 34

백준(Python) 1912번 연속합 풀이

Python으로 구현한 1912번 연속합 문제 풀이입니다. https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) data = list(map(int, input().split())) dp = [i for i in data] for i in range(1, n) : dp[i] = max(dp[i], dp[i-1] + data[i]) print(max(dp)) 1. ..

백준(Python) 11054번 가장 긴 바이토닉 부분 수열 풀이

Python으로 구현한 11054번 가장 긴 바이토닉 부분 수열 문제 풀이입니다. https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net import sys input = sys.stdin.readline a = int(input()) data= list(map(int, input().split())) increase = [1] * a decrease = [1] * a for i in range(a) : for j in range(i) : if data[j] < data..

백준(Python) 11722번 가장 긴 감소하는 부분 수열 풀이

Python으로 구현한 11722번 가장 긴 감소하는 부분 수열 문제 풀이입니다. https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net import sys input = sys.stdin.readline a = int(input()) data = list(map(int, input().split())) dp = [1] * a for i in range(a) : for j in..

백준(Python) 11055번 가장 큰 증가 부분 수열 풀이

Python으로 구현한 11055번 가장 큰 증가 부분 수열 문제 풀이입니다. https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net import sys input = sys.stdin.readline a = int(input()) data = list(map(int, input().split())) dp = [i for i in data] for i in range(a) : for j in ..

[다이나믹 프로그래밍] 이코테 (파이썬) 편집 거리 풀이

[문제] 두 개의 문자열 A와 B가 주어졌을 때, 문자열 A를 편집하여 문자열 B로 만들고자 합니다. 문자열 A를 편집할 때는 다음의 세 연산 중에서 한 번에 하나씩 선택하여 이용할 수 있습니다. 1. 삽입(Insert) : 특정한 위치에 하나의 문자를 삽입합니다. 2. 삭제(Remove) : 특정한 위치에 있는 하나의 문자를 삭제합니다. 3. 교체(Replace) : 특정한 위치에 있는 하나의 문자를 다른 문자로 교체합니다. 이때 편집 거리란 문자열 A를 편집하여 문자열 B로 만들기 위해 사용한 연산의 수를 의미합니다. 문자열 A를 문자열 B로 만드는 최소 편집 거리를 계산하는 프로그램을 작성하세요. 예를 들어 "sunday"와 "saturday"의 최소 편집 거리는 3입니다. [입력 조건] 1. 두 ..

[다이나믹 프로그래밍] 이코테 (파이썬) 못생긴 수 풀이

[문제] 못생긴 수란 오직 2, 3, 5만을 소인수(Prime Factor)로 가지는 수를 의미합니다. 다시 말해 오직 2, 3, 5를 약수로 가지는 합성수를 의미합니다. 1은 못생긴 수라고 가정합니다. 따라서 못생긴 수들은 {1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...} 순으로 이어지게 됩니다. 이때, n번째 못생긴 수를 찾는 프로그램을 작성하세요. 예를 들어 11번째 못생긴 수는 15입니다. [입력 조건] 1. 첫째 줄에 N이 입력됩니다. (1

[다이나믹 프로그래밍] 이코테 (파이썬) 병사 배치하기 풀이

[문제] N명의 병사가 무작위로 나열되어 있습니다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 합니다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 합니다. 또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용합니다. 그러면서도 남아 있는 병사의 수가 최대가 되도록 하고 싶습니다. 예를 들어, N = 7 일 때 나열된 병사들의 전투력이 다음과 같다고 가정하겠습니다. 병사 번호 1 2 3 4 5 6 7 전투력 15 11 4 8 5 2 4 이때 3번 병사와 6번 병사를 열외시키면, 다음과 같이 남아 있는 병사의 수가 내림차순의 형태가 되며 5명이 됩니다. 이는 남아 있는 병..

[다이나믹 프로그래밍] 이코테 (파이썬) 퇴사 풀이

[문제] 상담원으로 일하고 있는 백준이는 퇴사를 하려고 합니다. 오늘부터 N + 1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 합니다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아 놓았습니다. 각각의 상담은 상담을 완료하는 데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있습니다. N = 7인 경우에 다음과 같은 상담 일정표가 있습니다. 1일 2일 3일 4일 5일 6일 7일 Ti 3 5 1 1 2 4 2 Pi 10 20 10 20 15 40 200 1일에 잡혀 있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10입니다. 5일에 잡혀 있는 상담은 총 2일이 걸리..

백준(Python) 1932번 정수 삼각형 풀이

Python으로 구현한 1932번 정수 삼각형 문제 풀이입니다. https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net n = int(input()) dp = [] # 다이나믹 프로그래밍을 위한 DP 테이블 초기화 for _ in range(n) : dp.append(list(map(int, input().split()))) # 다이나믹 프로그래밍으로 두 번째 줄부터 내려가면서 확인 for i in range(1, n) : for j in range(i + 1) : # 왼쪽 위에서 내려오는 경우 if j == 0 : up_..

[다이나믹 프로그래밍] 이코테 (파이썬) 정수 삼각형 풀이

[문제] 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습입니다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하세요. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있습니다. 삼각형의 크기는 1 이상 500 이하입니다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 그 값의 범위는 0 이상 9999 이하입니다. [입력 조건] 1. 첫째 줄에 삼각형의 크기 n(1