Hackerrank 10

[HackerRank] Knapsack

def unboundedKnapsack(k, arr): # Write your code here row = len(arr) col = k dp = [[0]*(k+1) for _ in range(row+1)] for i in range(1,row+1): dp[i][0] = 1 for i in range(1,row+1): for j in range(1,col+1): if j >= arr[i-1]: dp[i][j] = dp[i-1][j] + dp[i][j-arr[i-1]] else: dp[i][j] = dp[i-1][j] for i in range(col,-1,-1): if dp[row][i] != 0: return i 이번 문제는 주어진 배열(arr)의 원소들을 가지고 만들 수 있는 타겟 값(k)을 초과하지..

Algorithm/DP 2023.05.20

[HackerRank] The Power Sum

# 정답 코드 def powerSum(X, N): # Write your code here def helper(target,power,num): if target == 0: return 1 if target math.sqrt(target): return 0 # 현재 수를 포함하는 경우와 포함하지 않는 경우의 수를 재귀적으로 계산 include = helper(target-num**power,power,num+1) exclude = helper(target,power,num+1) return include + exclude return helper(X,N,1) 이번 문제는 주어진 X값을 N제곱수로 만들 수 있는 경우의 수를 구하는 문제이다. 처음에 이 문제를 풀이했을 때는 X보다 작..

Algorithm/Recursion 2023.05.18

[HackerRank] The Coin Change Problem

def getWays(n, c): # Write your code here coin_count = len(c) dp = [[0]*(n+1) for _ in range(coin_count+1)] for i in range(1,coin_count+1): dp[i][0] = 1 for i in range(1,coin_count+1): for j in range(1,n+1): coin_value = c[i-1] if coin_value > j : dp[i][j] = dp[i-1][j] else: dp[i][j] = dp[i-1][j] + dp[i][j-coin_value] return dp[coin_count][n] 이번 문제는 주어진 c 배열 안의 값들로 n을 만들 수 있는 경우의 수를 구하는 문제이다. 문제..

Algorithm/DP 2023.05.14