это одна из часто встречающихся в программировании задач. Надо понимать и знать возможные способы решения этой задачи, которые уже ранее широко проработали другие спецы. После изучения будешь применять что-то подобное и для решения сходных по сути задач, не затрачивая много времени на осмысление и разработку решения.
Программист должен уметь мыслить алгоритмически. А научиться этому на простых и давно решенных кем-то задачах проще и быстрее, чем с нуля становиться первооткрывателем.