how to approach a coding problem