Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Regras de uma conta bancária

Proteja o saldo de uma conta com regras de depósito e saque, rejeitando operações inválidas.

O que você vai aprender

  • Mudar o estado só por meio de métodos
  • Recusar valores inválidos e saques acima do saldo
  • Contar as operações recusadas

Problema

Ver original (inglês)

Encapsulation mantém os dados de um objeto privados e só os altera por meio de métodos que aplicam as regras. O saldo de uma conta bancária só pode mudar por deposit e withdraw.

Comece com um saldo de 0 e processe as operações, cada deposit <amount> ou withdraw <amount>:

  • Um valor que seja 0 ou negativo é rejeitado.
  • Um saque maior que o saldo atual é rejeitado.
  • Caso contrário, o saldo muda.

Implemente bank_account_rules(operations).

Entrada

operations: As operações, na ordem.

Saída

Retorne [final_balance, rejected_count].

Restrições

0 ≤ número de operações ≤ 100,000

−10^9 ≤ valor ≤ 10^9

Exemplos

Exemplo 1
Entrada:
operations = ["deposit 100", "withdraw 30", "withdraw 200"]

Saída esperada:
expected = [70, 1]
Entrada:
std::vector<std::string> operations = {"deposit 100", "withdraw 30", "withdraw 200"};

Saída esperada:
std::vector<long long> expected = {70, 1};
Entrada:
string[] operations = new string[] {"deposit 100", "withdraw 30", "withdraw 200"};

Saída esperada:
long[] expected = new long[] {70, 1};

Explicação

100 − 30 deixa 70; sacar 200 deixaria a conta no negativo, então isso é rejeitado: [70, 1].

Exemplo 2
Entrada:
operations = ["deposit -5", "withdraw 0", "deposit 10"]

Saída esperada:
expected = [10, 2]
Entrada:
std::vector<std::string> operations = {"deposit -5", "withdraw 0", "deposit 10"};

Saída esperada:
std::vector<long long> expected = {10, 2};
Entrada:
string[] operations = new string[] {"deposit -5", "withdraw 0", "deposit 10"};

Saída esperada:
long[] expected = new long[] {10, 2};

Explicação

O depósito negativo e o saque zero são ambos rejeitados; o último depósito tem sucesso: [10, 2].

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Mantenha o saldo privado e altere-o só em deposit e withdraw.

Dica 2

Recuse primeiro valores iguais a 0 ou negativos.

Dica 3

Um saque não pode deixar o saldo abaixo de zero.

Complexidade esperada

tempo O(número de operações), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.