
정답
㉠: cRate / 20, (나) 실행 결과: Green, ㉡: break;, ㉢: break;, ㉣: break;, ㉤: case 1
출제 의도
정수형 입력값을 구간별로 나누어 처리하기 위해 switch–case 문을 활용하는 원리를 이해하고, 의도적인 fall-through 구조와 break 문의 역할을 정확히 파악하는지를 평가한다.
풀이 과정
배터리 충전량 cRate는 0부터 100까지의 정수이며, 문제의 색상 구간은 20% 단위로 나누어져 있다. 따라서 switch 문에서 사용할 값은 충전량을 20으로 나눈 몫이 적절하다.
즉, cRate를 20으로 나눈 정수값에 따라 다음과 같이 분류된다.
$$ \begin{aligned} 80 \sim 100 &\Rightarrow 4, 5 \\ 60 \sim 79 &\Rightarrow 3 \\ 40 \sim 59 &\Rightarrow 2 \\ 0 \sim 39 &\Rightarrow 0, 1 \end{aligned} $$
따라서 switch 문의 조건식에는 cRate를 20으로 나눈 값이 들어가야 하므로 ㉠에는 \(cRate / 20\)이 들어간다.
학생이 작성한 코드에는 break 문이 없기 때문에, 조건에 해당하는 case부터 아래의 모든 case가 연속 실행되는 fall-through 현상이 발생한다.
cRate가 75일 때를 계산하면
$$ 75 / 20 = 3 $$
이므로 case 3부터 실행된다. 따라서 출력은 순서대로
Green Yellow Red
가 되며, 문제에서는 첫 번째 실행 결과만을 묻고 있으므로 (나)의 실행 결과는 Green이다.
교사가 제시한 (다) 프로그램은 올바른 동작을 위해 각 case마다 break 문을 추가해야 한다. 따라서 ㉡, ㉢, ㉣에는 모두 break;가 들어간다.
마지막 Red를 출력하는 부분은 0~39% 구간을 처리해야 하므로 남은 case는 case 1이다. 따라서 ㉤에는 case 1이 들어간다.
<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>