Код Senior Жадные обновлено

Банкомат

Условие

Номиналы 5000, 1000, 500, 100, 50. Объект limits хранит доступное количество каждой купюры и мутируется после выдачи. Верни объект «номинал: количество», выдавая приоритет крупным купюрам. Если сумма не кратна минимальной купюре - вернуть строку 'Error: Incorrect value'. Если купюр не хватает - 'Error: Not enough money'.

Что проверяют тесты

  • выдаёт крупными

  • лимиты уменьшаются

  • не хватает денег

  • сумма не кратна

  • последовательные вызовы

  • крупные исчерпаны - добираем мелкими

Как подойти

Жадный алгоритм здесь корректен, потому что номиналы кратны друг другу - для произвольных номиналов пришлось бы считать динамику, и это хороший follow-up. Ключевое требование к реализации: сначала построить план целиком, и только потом списать купюры. Списание по ходу оставит банкомат в испорченном состоянии при неудачной выдаче - именно это и проверяет тест с миллионом.

Подсказки: 3
  1. Идём от крупных к мелким, беря минимум из «сколько нужно» и «сколько есть».
  2. Лимиты нельзя трогать, пока не убедился, что выдача возможна целиком.
  3. Проверка кратности - до всего остального.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме