목록Algorithms/DP (Dynamic Programming) (16)
# 00 01 02 # 10 11 12 # 20 21 22 # 30 31 32 # # 최소값은 간선 한번이 최소임 # 왼쪽값: 10 = sum(01,10) # 중간값: 11 = sum(01,11) # 오른쪽값: 12 = sum(01,12) # 왼쪽값: 20 = min(sum(10,20), sum(11,20)) # 중간값: 21 = min(sum(10,21),sum(11,21),sum(12,21)) # 오른쪽값: 22 = min(sum(11,22),sum(12,22)) test_num = 1 while True: node_num = int(input()) if not node_num or node_num < 2: break # node_num을 1부터 시작하기 위해 routes = [[0]*3] + [li..
# 발전소 개수 1
# BruteForce로 모든 조건 구하려 했지만 +, - 개수 부여 부분에서 막힘 from itertools import combinations n = int(input()) chu = list(map(int, input().split())) t = int(input()) target = list(map(int, input().split())) n = len(chu) for i in range(2, n+1): for j in combinations(chu, i): # + or - # 사용가능 총 부호 개수 m = len(chu)-1 for tg in target: pass # 1. 최대 무게까지 dp 만듬 # 2. 각 경우의 수에 대해 합 또는 빼기 n = int(input()) chu = list(m..
# 첫접근 # Brute Force로 하려했다... # 하지만 이후 조건에서 10, [1,2,3] 주어졌을 때 또 다시 조합을 늘려가야 했기 때문에 풀이 불가 # 5 # 1 * 5 # 1 + 2*2 # 1*3 + 2*1 # 5*1 # 10, [1,2,3,5,10] # 1,2,3,4,5 로 조합하는 방법 from itertools import combinations def solution(n, money): answer = 0 money.sort() for i in range(1, len(money)+1): for m in combinations(money, i): temp = 0 if sum(m) > n: break else: temp = n - sum(m) return answer % 100000000..
# 인덱스 범위 맞추는게 항상 헷갈린다.. # 인덱스 끝에 맞춰서 -1 방식이 마지막 인덱스 -1 경우 보다 인덱스 범위 맞추기 쉬운것같다. def solution(triangle): dp = [[] for _ in range(len(triangle))] dp[0].append(triangle[0][0]) # i = 다음 dp / i-1 = 이전 dp for i in range(1, len(triangle)): # 다음 dp의 범위 for j in range(i+1): # 맨 왼쪽끼리 더하기 if j == 0: dp[i].append(dp[i-1][0] + triangle[i][j]) # 맨 오른쪽끼리 더하기 elif j == i: dp[i].append(dp[i-1][-1] + triangle[i][j..
# 규칙 찾기 # 시간 초과... def solution(n): if n == 1: return 1 elif n == 2: return 2 dp = [0]*(n+1) dp[1] = 1 dp[2] = 2 for i in range(3,n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] % 1000000007 # 나머지 연산 과정을 for문 안에서 미리 처리하니까 효율성 통과 def solution(n): if n == 1: return 1 elif n == 2: return 2 dp = [0]*(n+1) dp[1] = 1 dp[2] = 2 for i in range(3,n+1): dp[i] = (dp[i-1] + dp[i-2]) % 1000000007 return dp[n] %..