A discrete-adjoint formulation is presented for the three-dimensional Euler equations discretized on a Cartesian mesh with embedded boundaries. The solution algorithm for the adjoint and flow-sensitivity equations leverages the Runge-Kutta time-marching scheme in conjunction with the parallel multigrid method of the flow solver. The matrix-vector products associated with the linearization of the flow equations are computed on-the-fly, thereby minimizing the memory requirements of the algorithm at a computational cost roughly equivalent to a flow solution. Three-dimensional test cases, including a wing-body geometry at transonic flow conditions and an entry vehicle at supersonic flow conditions, are presented. These cases verify the accuracy of the linearization and demonstrate the efficiency and robustness of the adjoint algorithm for complex-geometry problems.