1) 힘들다 vs 어렵다
Basically 힘들다 means demanding a lot of energy, power, competency etc. 어렵다 means difficult. Let's say you are trying to move 100 bottles of water. That is not a difficult job, but time, energy- consuming job, so we can use 힘들다. But, if we are talking about solving a math problem, 어렵다 (difficult) would be better combination. But sometimes we Koreans use those two words interchangeably... unconsciously.
2) 풀다 vs 해결하다.
풀다 literally means untie, unleash, untangle, solve etc. 해결하다 usually means solve. Simply speaking 풀다 has more meanings than 해결하다 does. Then, in case that both two words means solve, still there is a subtle difference. 해결하다 sounds more formal than 풀다, because 해결하다 came from 解决. Usually the Korean words from Chinese sound more formal than pure Korean words, just like some Greek or Latin - originated English words sound so.