how to recognize which category a problem falls under and which structure/pattern/algorithm to use