Following the hint, we transform from Vertex Cover [VC].
Given an instance of VC, we construct an instance of
Clique as follows:
firstly, construct the complementary graph -- that is, the graph
in which a pair of vertices is joined if and only if they are
not joined in the original -- to the graph of the instance of
VC;
secondly, find the integer k = n - p, where n is
the number of vertices in the [either!] graph, and p is
the proposed number of vertices in the cover.
This construction can be carried out in time polynomial
in n, and hence in the size of the instance of VC.
Now ask whether the complementary graph has a clique
of size k.
If so, then all edges joining vertices in this clique are in the
complementary graph, and hence any edges in the original graph
are incident on at least one of the remaining p vertices,
and hence the original graph has a cover of size p.
Conversely. if the original graph has a cover of size p,
then it contains no edge joining any pair of the remaining
k vertices, and hence these form a clique in the
complementary graph.
So, the instance of VC and the constructed instance of
Clique have the same decision.
Clique is in NP, for, given a `yes' instance of Clique,
an oracle could propose a suitable set of vertices which
could be checked in polynomial time.
Since VC is NP-complete, it follows that
Clique too is NP-complete;
that is, any decision problem D in NP can be
transformed in polynomial time into an instance of VC
and hence into an instance of Clique with the same decision.