백준(Python) 풀이/다이나믹 프로그래밍 26

백준(Python) 1699번 제곱수의 합 풀이

Python으로 구현한 1699번 제곱수의 합 문제 풀이입니다. https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) dp = [i for i in range(n + 1)] for i in range(1, n + 1) : for j in range(1, i) : if j**2 > i : break if dp[i] ..

백준(Python) 2579번 계단 오르기 풀이

Python으로 구현한 2579번 계단 오르기 문제 풀이입니다. https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) stair = [0] for _ in range(n) : stair.append(int(input())) if n == 1 : print(stair[1]) else : dp = [0] * (n + 1) dp[1] = stair[1] dp[2] = s..

백준(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 ..

백준(Python) 11053번 가장 긴 증가하는 부분 수열 풀이

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

백준(Python) 2156번 포도주 시식 풀이

Python으로 구현한 2156번 포도주 시식 문제 풀이입니다. https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net n = int(input()) wine = [] for i in range(n) : wine.append(int(input())) dp = [0] * n dp[0] = wine[0] if n > 1 : dp[1] = wine[0] + wine[1] if n > 2 : dp[2] = max(wine[2] + wine[1], wine[2]..

백준(Python) 2193번 이친수 풀이

Python으로 구현한 2193번 이친수 문제 풀이입니다. https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net # 1 : 1 (1가지) # 2 : 10 (1가지) # 3 : 101, 100 (2가지) # 4 : 1000, 1010, 1001 (3가지) # 5 : 10000, 10001, 10010, 10100, 10101 (5가지) def solution(n) : if n == 1 or n == 2 : return 1 if n == 3 ..

백준(Python) 11057번 오르막 수 풀이

Python으로 구현한 11057번 오르막 수 문제 풀이입니다. https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net n = int(input()) dp = [[0] * 10 for i in range(n)] dp[0] = [1 for i in range(10)] for i in range(1, n) : sum_value = 0 for j in range(10) : for k in range(j + 1) : dp[..