Doing an elementary row operation on the matrix $A$ can be seen as multiplying $A$ by a suitable invertible matrix, call it $E_1$. So the whole process leads to writing
$$
U=E_{k}\dots E_{2}E_{1}A
$$
where $E_j$ $(j=1,2,\dots,k)$ correspond to the elementary row operation we performed and $U$ is a row reduced matrix (for instance, the row reduced echelon form). Since each $E_j$ is invertible, we can write
$$
A=FU
$$
where $F=E_1^{-1}E_2^{-1}\dots E_{k}^{-1}$ and, if one performs all row swaps at the start, the matrix $F$ can be written even without any computation.
Of course no operation of this kind changes the shape of the matrices we successively get and the final matrix $U$ will have zero or more “zero rows” at the bottom.
At this point we can remove those “zero rows” from $U$; if there are $l$ of them, we can also remove the $l$ rightmost columns of $F$. Calling $F_0$ and $U_0$ the matrices so obtained we still have
$$
A=F_0U_0
$$
and both $F_0$ and $U_0$ have their rank equal to the rank of $A$. This is called a full rank decomposition, because those matrices have the maximum rank they possibly have, based on their shape; say that $A$ is $m\times n$ and its rank is $r$. Then $F_0$ will be $m\times r$ $(r\le m)$ and $U_0$ will be $r\times n$ ($r\le n$).
In particular $F_0^HF_0$ ($H$ denotes the hermitian transpose, the simple transpose when the matrices are over the reals) is $r\times r$ invertible and
$$
(F_0^HF_0)^{-1}F_0^H
$$
not only is a left inverse of $F_0$ but is its Moore-Penrose pseudoinverse $F_0^+$. Similarly, $U_0U_0^H$ is invertible and $U_0^H(U_0U_0^H)^{-1}=U_0^+$. Moreover the Moore-Penrose pseudoinverse of $A$ is
$$
A^+=U_0^+F_0^+
$$
Indeed, any time we find a full rank decomposition $A=BC$, we can write $A^+=C^+B^+$ (and the pseudoinverse of $B$ and $C$ are computed as above).
The Moore-Penrose pseudoinverse is useful in computing the least squares solutions of $Ax=b$ and this is an efficient algorithm for finding it.