Advertisement
Alexxik

Untitled

Sep 15th, 2023 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.82 KB | None | 0 0
  1. // MARK: - Design ATM Machine
  2. //Input
  3. //["ATM", "deposit", "withdraw", "deposit", "withdraw", "withdraw"]
  4. //[[], [[0,0,1,2,1]], [600], [[0,1,0,1,1]], [600], [550]]
  5. //Output
  6. //[null, null, [0,0,1,0,1], null, [-1], [0,1,0,0,1]]
  7.  
  8. class ATM {
  9.    
  10.     var nominal: [Int]
  11.     var counts: [Int]
  12.  
  13.     init() {
  14.         self.nominal = [20, 50, 100, 200, 500]
  15.         self.counts = Array.init(repeating: 0, count: 5)
  16.     }
  17.    
  18.     // Заносим по индексам то что внесли
  19.     func deposit(_ banknotesCount: [Int]) {
  20.         for i in 0..<banknotesCount.count {
  21.             counts[i] += banknotesCount[i]
  22.         }
  23.     }
  24.    
  25.     // Снимаем amount
  26.     func withdraw(_ amount: Int) -> [Int] {
  27.         var amount = amount
  28.         var ans = Array.init(repeating: 0, count: 5)
  29.        
  30.         for i in stride(from: nominal.count-1, through: 0, by: -1) {
  31.            
  32.             // Сколько нам надо
  33.             let need = amount/nominal[i]
  34.             let currentBank = counts[i]
  35.            
  36.             // Выбираем минимальное - так как это то, что реально можем использовать,
  37.             // например, если получилось что нужна 1 купюра при amount/nominal[i], а всего в банке 0, то возвращаем 0
  38.            
  39.             let canUse = min(need, currentBank)
  40.             ans[i] = canUse
  41.  
  42.             // Если canUse = 0, то и вычитаем 0
  43.             amount -= canUse * nominal[i]
  44.         }
  45.        
  46.         if amount != 0 {
  47.             return [-1]
  48.         }
  49.        
  50.         for i in 0..<nominal.count {
  51.             counts[i] -= ans[i]
  52.         }
  53.        
  54.         return ans
  55.     }
  56. }
  57.  
  58. let atm = ATM()
  59. atm.deposit([0,1,0,1,1])
  60. atm.withdraw(550)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement