본문 바로가기

다이나믹프로그래밍5

BOJ 15990 1, 2, 3 더하기 5 www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 코드 from sys import stdin input = stdin.readline MOD = 1000000009 T = int(input()) dp = [[0, 0, 0] for _ in range(100001)] dp[1] = [1, 0, 0] dp[2] = [0, 1, 0] dp[3] = [1, 1, 1] dp[4] = [2, 0, 1] for i in range(5, len(dp)): dp[i][0] = (dp[i-1][1] + dp[i-1][2]) %.. 2020. 10. 31.
BOJ 2133 타일 채우기 www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net 2xN 타일링 문제랑 똑같을 줄 알고 만만히 봤다가 죽을상 짓게 만든 문제다. 답안 코드 [Python3 코드] from sys import stdin input = stdin.readline def solution(N): # dp[n] : 3*n 인 타일을 채우는 경우의 수 # dp[n] = dp[n-2]*dp[2] + dp[n-4]*2 + dp[n-6]*2 + ... ## 2 곱하는 이유 : 예외 케이스 dp = [0 for _ in range(31)] dp[0] = 1 dp[2] = 3 for i in range(4.. 2020. 10. 28.
BOJ 1088 쉬운 계단 수 python3 문제 : https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 코드 from sys import stdin input = stdin.readline NANUGE = 1000000000 N = int(input()) # 격자 틀 만들기 dp = [[-1 for _ in range(10)] for _ in range(N+1)] dp[1] = [1 for _ in range(10)] # 격자 채우기 for i in range(2, N+1): for start_number in range(10): if start_number == 0: # 길이가 i, 0으로 시작하는 숫.. 2020. 4. 17.
BOJ 1149 RGB거리 python3 문제 : https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다. www.acmicpc.net 코드 from sys import stdin input = stdin.readline R, G, B = 0, 1, 2 N = int(input()) houses = [[-1, -1, -1] for _ in range(N)] # 각 집의 색깔 별 가격 입력 for i in range(N): houses[i] = list(map(int, input()... 2020. 4. 17.
[백준] 14501 퇴사 python3 문제 : https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 코드 N = int(input()) T = [0] * (N+1) P = [0] * (N+1) for i in range(1, N+1): T[i], P[i] = map(int, input().split(" ")) # 격자 만들기 grid = [[0]*(N+1) for _ in range(N+1)] # row: 상담, column: 일 # 격자 채우기 for row in range(1, N+1): time = T[row] price = P[row] for col in range(1, N+1): previous = max(grid.. 2020. 3. 8.