ATM 기계 설계
5
액면가의 지폐를 보관하는 ATM 기계가 있습니다. 처음에는 ATM이 비어 있습니다. 사용자는 기계를 사용하여 원하는 금액을 입금하거나 인출할 수 있습니다.인출 시 기계는 금액이 큰 지폐를 우선적으로 사용합니다.
20
를 인출하려고 하는데 50
100
지폐, 200
500
지폐, $300
2
지폐가 있으면 기계는 $50
지폐를 사용합니다. ) 및 1
지폐. $100
출금을 시도할 때 1
$200
지폐와 $100
$200
지폐가 있는 경우에는 기계가 $600
지폐를 먼저 사용하려고 하기 때문에 출금 요청이 거부됩니다. ) 지폐를 사용하고 남은 지폐를 완성하기 위해 지폐를 사용할 수 없습니다3
. 기계는 $200
지폐 대신 1
지폐를 사용할 수 없습니다. ATM 클래스를 구현합니다.
$500
ATM 개체를 초기화합니다. $500
$100
, $200
, $500
, ATM()
및 void deposit(int[] banknotesCount)
순서로 새 지폐를 입금합니다. $20
$50
, $100
, $200
, $500
, int[] withdraw(int amount)
순으로 사용자에게 건네줄 지폐 갯수의 길이 5
배열을 반환합니다. 인출 후 ATM의 지폐 수를 업데이트합니다. 가능하지 않은 경우 $20
를 반환합니다(이 경우 지폐를 인출하지 마십시오). 예 1:
입력
["ATM", "입금", "출금", "입금", "출금", "출금"]
[[], [[0,0,1,2,1]], [600], [[0,1,0,1,1]], [600], [550]]
산출
[널, 널, [0,0,1,0,1], 널, [-1], [0,1,0,0,1]]
설명
ATM atm = 새 ATM();
atm.deposit([0,0,1,2,1]);//$100 지폐 1장, $200 지폐 2장,
//그리고 $500 지폐 1장.
atm.withdraw(600);//[0,0,1,0,1]을 반환합니다. 기계는 $100 지폐 1장을 사용합니다.
//그리고 $500 지폐 1장. 은행에 남겨진 지폐
//머신은 [0,0,0,2,0]입니다.
atm.deposit([0,1,0,1,1]);//$50, $200, $500 지폐 1개를 입금합니다.
//기계의 지폐는 이제 [0,1,0,3,1]입니다.
atm.withdraw(600);//[-1]을 반환합니다. 기계는 $500 지폐를 사용하려고 시도합니다.
//나머지 $100를 완료할 수 없습니다.
//철회 요청이 거부됩니다.
//요청이 거부되었으므로 지폐의 수
//기계에서 수정되지 않습니다.
atm.withdraw(550);//[0,1,0,0,1]을 반환합니다. 기계는 $50 지폐 1장을 사용합니다.
//그리고 $500 지폐 1장.
제약:
$50
$100
$200
$500
호출은 [-1]
및 banknotesCount.length == 5
로 이루어집니다. 0 <= banknotesCount[i] <= 109
및 1 <= amount <= 109
에 대해 최소 한 번 호출됩니다. 해결책:
from collections import defaultdict
class ATM:
def __init__(self):
self.notectr = defaultdict(int)
def deposit(self, banknotesCount: List[int]) -> None:
for i in range(5):
self.notectr[[20, 50, 100, 200, 500][i]] += banknotesCount[i]
def withdraw(self, amount: int) -> List[int]:
currnotectr = self.notectr.copy()
for note in [500, 200, 100, 50, 20]:
notesused = min(amount // note, currnotectr[note])
amount -= notesused * note
currnotectr[note] -= notesused
if amount == 0:
break
if amount != 0:
return [-1]
used = [self.notectr[note] - currnotectr[note] for note in [20, 50, 100, 200, 500]]
self.notectr = currnotectr
return used
# Your ATM object will be instantiated and called as such:
# obj = ATM()
# obj.deposit(banknotesCount)
# param_2 = obj.withdraw(amount)
Reference
이 문제에 관하여(ATM 기계 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/design-an-atm-machine-4kfi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)