


정답
㉠ \(value > 255\), ㉡ \(\gg\) (오른쪽 시프트 연산자)
출제 의도
그레이 스케일 이미지의 픽셀값을 일정 양만큼 밝게 조절할 때, 최댓값 255를 넘지 않도록 제한하는 조건식을 작성하고, 밝게 조절된 픽셀값을 임계값 128을 기준으로 흑백(0 또는 255)으로 변환하기 위해 비트 시프트 연산을 활용하는 능력을 평가한다.
풀이 과정
먼저 원본 픽셀값 \(origin[i][j]\)에 사용자가 입력한 밝기 조절 값 \(brightness\)를 더하여
$$ value = origin[i][j] + brightness $$
를 계산한다. 이때 조건에서 밝기 조절 후의 값이 255를 넘어가면 그 픽셀값을 최댓값 255로 하라고 했으므로, 3항 연산자를 사용할 때 조건 부분에는 \(value\)가 255를 초과하는지를 검사해야 한다.
따라서
$$ bright[i][j] = \begin{cases} 255 & \text{if } value > 255 \\ value & & \text{otherwise} \end{cases} $$
가 되어야 하므로, ㉠에는 \(value > 255\)가 들어간다.
다음으로 밝게 조절된 픽셀값 \(bright[i][j]\)를 기준 값 128과 비교하여, 128 이상이면 흰색(255), 128 미만이면 검정색(0)으로 만들고자 한다. 픽셀값은 0부터 255까지의 정수이므로 8비트로 표현할 수 있고, 128은 이진수로 \(10000000_2\) 이다.
따라서 \(bright[i][j]\)를 오른쪽으로 7비트 시프트하면,
$$ value2 = bright[i][j] \gg 7 $$
이 되고, 이 값은 다음과 같은 성질을 가진다.
$$ value2 = \begin{cases} 0 & \text{if } 0 \le bright[i][j] \le 127 \\ 1 & \text{if } 128 \le bright[i][j] \le 255 \end{cases} $$
즉, 128 미만일 때는 0, 128 이상일 때는 1이 된다. 이어서 코드에서
$$ whiteblack[i][j] = value2 ? 255 : value2 $$
를 수행하면, \(value2 = 0\)일 때는 0, \(value2 = 1\)일 때는 255가 저장되어, 픽셀값이 128보다 작으면 검정색(0), 크거나 같으면 흰색(255)으로 변환된다.
이러한 동작을 위해 ㉡에는 오른쪽 시프트 연산자 \(\gg\)가 들어가야 한다.
<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>