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

백준(Python) 1149번 RGB거리 풀이

Python으로 구현한 1149번 RGB거리 문제 풀이입니다. https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net n = int(input()) data = [list(map(int, input().split())) for _ in range(n)] for i in range(1, n): data[i][0] = min(data[i-1][1], data[i-1][2]) + data[i][0] data[i][1] = min(dat..

백준(Python) 1003번 피보나치 함수 풀이

Python으로 구현한 1003번 피보나치 함수 문제 풀이입니다. https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net def fibo(num) : length = len(zero) if num >= length : for i in range(length, num + 1) : zero.append(zero[i-1] + zero[i-2]) one.append(one[i-1] + one[i-2]) print(zero[num], one[num]) t = int(input()) zero = [1, 0, 1] # 0일때 1개, 1일때 0개, 2일때 1개 ..

백준(Python) 17070번 파이프 옮기기 1 풀이

Python으로 구현한 17070번 파이프 옮기기 1 문제 풀이입니다. https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net n = int(input()) data = [list(map(int, input().split())) for _ in range(n)] # 0: 가로, 1: 세로, 2: 대각선 dp = [[[0] * n for _ in range(n)] for _ in range(3)] dp[0][0][1] = 1 #..

백준(Python) 9465번 스티커 풀이

Python으로 구현한 9465번 스티커 문제 풀이입니다. https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net import sys input = sys.stdin.readline t = int(input()) for _ in range(t) : n = int(input()) dp = [list(map(int, input().split())) for _ in range(2)] if n == 1 : print(max(dp[0][0], dp[..

백준(Python) 10844번 쉬운 계단 수 풀이

Python으로 구현한 10844번 쉬운 계단 수 문제 풀이입니다. https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) dp = [[0 for i in range(10)] for j in range(n + 1)] for i in range(1, 10) : dp[1][i] = 1 for i in range(2, n + 1) : for j in range(10) : if j == 0 : dp[i][j] = dp[i-1][j+1] elif j == 9 : dp[i][j]..

백준(Python) 11052번 카드 구매하기 풀이

Python으로 구현한 11052번 카드 구매하기 문제 풀이입니다. https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) p = [0] + list(map(int, input().split())) dp = [0] * (n + 1) for i in range(1, n + 1) : for j in range(1, i + 1) : dp[i] = max(dp[i], ..

백준(Python) 2011번 암호코드 풀이

Python으로 구현한 2011번 암호코드 문제 풀이입니다. https://www.acmicpc.net/problem/2011 2011번: 암호코드 나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다. www.acmicpc.net data = list(map(int, list(input()))) l = len(data) dp = [0] * (l + 1) if data[0] == 0 : print(0) else : data = [0] + data dp[0] = 1 dp[1] = 1 # 암호코드 1개 for i in range(2, l + 1) : value = data[i] # 한자..

백준(Python) 2225번 합분해 풀이

Python으로 구현한 2225번 합분해 문제 풀이입니다. https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net import sys input = sys.stdin.readline n, k = map(int, input().split()) dp = [[0] * 201 for _ in range(201)] for i in range(201) : dp[1][i] = 1 dp[2][i] = i + 1 for i in range(2, 201) : dp[i][1] = i for j in range(2, 201) : dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % ..

백준(Python) 9461번 파도반 수열 풀이

Python으로 구현한 9461번 파도반 수열 문제 풀이입니다. https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net t = int(input()) dp = [0] * 101 for _ in range(t) : n = int(input()) def solution(n) : if n == 1 or n == 2 or n == 3 : return 1 if dp[n] != 0 : return dp[n] dp[n] = solution(n-2) + solution(..

백준(Python) 2133번 타일 채우기 풀이

Python으로 구현한 2133번 타일 채우기 문제 풀이입니다. https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net # 1일 때 : 0 # 2일 때 : 3 # 3일 때 : 0 # 4일 때 : 11 # 5일 때 : 0 n = int(input()) if n == 1 : print(0) elif n == 2 : print(3) elif n == 3 : print(0) else : dp = [0] * (n + 1) dp[0] = 1 dp[2] = 3 for i in range(4, n + 1) : if i % 2 == 0 : dp[i] = dp[i-2] * 3 f..