All challenges
Easy 0 solved 0% acceptance

Bank Account Rules

Protect an account's balance behind deposit and withdraw rules, rejecting invalid operations.

What you'll learn

  • Change state only through methods
  • Reject invalid amounts and overdrafts
  • Keep a count of rejected operations

Problem

Encapsulation keeps an object's data private and only changes it through methods that enforce the rules. A bank account's balance can only change through deposit and withdraw.

Start with a balance of 0 and process the operations, each deposit <amount> or withdraw <amount>:

  • An amount that is 0 or negative is rejected.
  • A withdrawal larger than the current balance is rejected.
  • Otherwise the balance changes.

Implement bank_account_rules(operations).

Input

operations: The operations, in order.

Output

Return [final_balance, rejected_count].

Constraints

0 ≤ number of operations ≤ 100,000

−10^9 ≤ amount ≤ 10^9

Examples

Example 1
Input:
operations = ["deposit 100", "withdraw 30", "withdraw 200"]

Expected output:
expected = [70, 1]
Input:
std::vector<std::string> operations = {"deposit 100", "withdraw 30", "withdraw 200"};

Expected output:
std::vector<long long> expected = {70, 1};
Input:
string[] operations = new string[] {"deposit 100", "withdraw 30", "withdraw 200"};

Expected output:
long[] expected = new long[] {70, 1};

Explanation

100 − 30 leaves 70; withdrawing 200 would overdraw the account, so it is rejected: [70, 1].

Example 2
Input:
operations = ["deposit -5", "withdraw 0", "deposit 10"]

Expected output:
expected = [10, 2]
Input:
std::vector<std::string> operations = {"deposit -5", "withdraw 0", "deposit 10"};

Expected output:
std::vector<long long> expected = {10, 2};
Input:
string[] operations = new string[] {"deposit -5", "withdraw 0", "deposit 10"};

Expected output:
long[] expected = new long[] {10, 2};

Explanation

The negative deposit and the zero withdrawal are both rejected; the last deposit succeeds: [10, 2].

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Keep the balance private and change it only in deposit and withdraw.

Hint 2

Reject amounts of 0 or less before anything else.

Hint 3

A withdrawal may not take the balance below zero.

Expected complexity

O(number of operations) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.