
정답
㉠에는 0이 들어가며, 20을 입력하면 출력은 \(6\)이다.
출제 의도
재귀함수의 동작을 추적하여 어떤 값을 계산하는지 파악하고, 주어진 입력에 대해 결과를 올바르게 구할 수 있는지를 평가하는 문제이다. 특히 조건문에 따른 누적 합의 의미를 이해해야 한다.
풀이 과정
함수 recur(n)의 동작을 살펴본다. \(n \le 1\)이면 \(0\)을 반환하고 재귀호출을 종료한다.
\(n \gt 1\)일 때는 두 경우로 나뉜다.
1. \(n \bmod 3 = 0\) 이면 \(\text{recur}(n) = 1 + \text{recur}(n-1)\) 2. 그렇지 않으면 \(\text{recur}(n) = \boxed{\text{㉠}} + \text{recur}(n-1)\)
여기에서 recur는 2 이상 \(n\) 이하의 수들 중에서 3의 배수의 개수를 세는 것으로 추론할 수 있다. 왜냐하면 \(n\)이 3의 배수일 때만 1을 더하고, 나머지 경우에는 아무 것도 더하지 않아야 하기 때문이다. 따라서 ㉠에는 \(0\)이 들어가야 한다.
\(n = 12\)일 때를 확인한다.
$$ \text{recur}(12) = \text{(2 이상 12 이하의 3의 배수의 개수)} $$
3의 배수는 \(3, 6, 9, 12\) 네 개이므로 \(\text{recur}(12) = 4\)가 되어, 문제의 조건과 일치한다. 따라서 ㉠이 \(0\)이라는 판단이 맞다.
이제 \(n = 20\)일 때를 구한다.
2 이상 20 이하의 3의 배수는
$$ 3, 6, 9, 12, 15, 18 $$
총 6개이므로
$$ \text{recur}(20) = 6 $$
따라서 20을 입력하면 프로그램의 출력값은 \(6\)이다.
<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>