The graph of $y = f(x)$ is shown below.

[asy]
unitsize(0.3 cm);

real func(real x) {
  real y;
  if (x >= -3 && x <= 0) {y = -2 - x;}
  if (x >= 0 && x <= 2) {y = sqrt(4 - (x - 2)^2) - 2;}
  if (x >= 2 && x <= 3) {y = 2*(x - 2);}
  return(y);
}

int i, n;

for (i = -8; i <= 8; ++i) {
  draw((i,-8)--(i,8),gray(0.7));
  draw((-8,i)--(8,i),gray(0.7));
}

draw((-8,0)--(8,0),Arrows(6));
draw((0,-8)--(0,8),Arrows(6));

label("$x$", (8,0), E);
label("$y$", (0,8), N);

draw(graph(func,-3,3),red);

label("$y = f(x)$", (4,-3), UnFill);
[/asy]

The graph of $y = g(x)$ is shown below.

[asy]
unitsize(0.3 cm);

real func(real x) {
  real y;
  if (x >= -3 && x <= 0) {y = -2 - x;}
  if (x >= 0 && x <= 2) {y = sqrt(4 - (x - 2)^2) - 2;}
  if (x >= 2 && x <= 3) {y = 2*(x - 2);}
  return(y);
}

real gunc(real x) {
  return(3 - 2*func(x));
}

int i, n;

for (i = -8; i <= 8; ++i) {
  draw((i,-8)--(i,8),gray(0.7));
  draw((-8,i)--(8,i),gray(0.7));
}

draw((-8,0)--(8,0),Arrows(6));
draw((0,-8)--(0,8),Arrows(6));

label("$x$", (8,0), E);
label("$y$", (0,8), N);

draw(graph(gunc,-3,3),red);

label("$y = g(x)$", (5,5), UnFill);
[/asy]

What is $g(x)$ in terms of $f(x)$?  For example, if you think $g(x) = f(x) + 1,$ enter "$f(x) + 1$", without quotation marks.
We must reflect the graph in the $x$-axis.  We can then stretch the graph vertically by a factor of 2, then shift the graph upwards by 3 units.  Thus, $g(x) = \boxed{3 - 2f(x)}.$