Sometimes no. That's when I do TDD.
I use TDD to pick apart the problem bit by bit implementing the next (then unknown) step in a very piece meal fashion.
edit: also, what kind of gatekeeping is
"You can only solve a problem with TDD well if you know EXACTLY what do you want to implement".
The end result is the same: a set of covering tests & working code.
You really defeated my actual experience and proved your point on this one /s