input: Write a python function to find the minimum number of coins needed to make a given amount.
  assert coinChange([1, 2, 5], 11) == 3
  assert coinChange([2], 3) == float('inf')
  assert coinChange([1, 2, 5], 0) == 0
  assert coinChange([1, 2, 5], 7) == 2
output: def coinChange(coins, amount):
      dp = [float('inf')] * (amount + 1)
      dp[0] = 0
  
      for coin in coins:
          for x in range(coin, amount + 1):
              dp[x] = min(dp[x], dp[x - coin] + 1)
      
      return dp[amount] if dp[amount] != float('inf') else float('inf')