본문 바로가기

수능문제풀이

2025 수능 수학영역 풀이 - 공통문제 (21~22, 홀수형)

공통 문제 마지막 파트다.

문제 21.

함수 $f(x) = x^3 + ax^2 + bx + 4$ 가 다음 조건을 만족시키도록 하는 두 정수 $a, b$에 대하여 $f(1)$의 최댓값을 구하시오.

모든 실수 $\alpha$에 대하여 $\lim_{x \rightarrow\alpha} \frac{f(2x + 1)}{f(x)}$ 의 값이 존재한다.

Code
using Roots

max_var = 50
var_range = [(-max_var + i, -max_var +j) for i in 1:2*max_var for j in 1:2*max_var]

f(x; a, b) = x^3 + a*x^2 + b*x + 4

function is_sln_valid(vec1::Vector, vec2::Vector)
    for x in vec1
        if !any(abs.(vec2 .- x) .< 0.0001)
            return false
        end
    end
    true
end

function is_pair_valid(pair)
    (a, b) = pair
    sln1 = find_zeros(x -> f(x; a, b), (-100, 100))
    sln2 = find_zeros(x -> f(2x+1; a, b), (-100, 100))
    is_sln_valid(sln1, sln2)
end

ans_candidates = filter(is_pair_valid, var_range)
map_fn_val = (pair -> f(1; a=pair[1], b=pair[2]))
println(ans_candidates)
ans = maximum(map_fn_val.(ans_candidates))
Output
[(-2, 1), (-1, 2), (0, 3), (1, 4), (2, 5), (3, 6), (4, 7)]
16
설명
  • 답이 가능한 순서쌍 $(a, b)$의 범위는 총 2500개로 잡았다. 사실 작은 범위에서부터 시작해서 답을 찾아보는 것이 기본인데, 어차피 작은 숫자 아니면 답 안나온다는 것을 알 수 있어서, 충분히 큰 숫자를 안잡아도 된다는 사실을 확인하고 설정하자 (계산 시간도 고려할 겸)
  • 사용한 수학적 지식은 문제에서 주어진 극한값이 존재하기 위해서는 $f(x) = 0$이 되는 모든 $x$에 대해서 $f(2x+1)=0$을 만족 해야 하고, $f(x)$에서의 해의 차수가 $f(2x+1)$에서의 해의 차수보다 높지 않아야 한다. 그런데 차수가 높지 않아야 한다는 조건을 빼먹었다. Zygote 패키지를 사용해서 미분한 함수에 대해서 같은 조건을 다시 적용하면 된다.
  • 사실 위에 이렇게 설명했지만, 더 자세한 이유는 함수가 3차함수이고 정수 (a, b)에 대해서 지금 상수항이 4일 경우에 $f(x) = (x - c)^3$을 만족하는 실수 $c$가 존재하지 않기 때문이다. 그렇기 때문에 2차조건까지만 체크하면 된다.
  • 해로 가능한 정수 $(a, b)$의 순서쌍이 첫 번째 줄에 출력되었고, 그에 따라서 $f(1)$의 최댓값을 구하면 $16$이다.

문제 22.

모든 항이 정수이고 다음 조건을 만족시키는 모든 수열 ${a_n}$ 에 대하여 $|a_1|$의 값의 합을 구하시오.

(가) 모든 자연수 $n$에 대하여
$$
a_{n+1} = \begin{cases}
a_n - 3 \qquad (|a_n|이 \ 홀수인 \ 경우) \\
\frac{1}{2} a_n \qquad (a_n = 0 \ 또는\ |a_n|이 \ 짝수인 \ 경우)
\end{cases}
$$
(나) $|a_m| = |a_{m+2}|$ 인 자연수 $m$의 최솟값은 3이다.

Code
n_max_len = 5
a1_range = [-100+i for i in 0:200]
a1_candidates = []

for a1 in a1_range
    a = [i < 2 ? a1 : undef for i in 1:n_max_len]
    for i in 2:n_max_len
        if a[i-1]%2 == 0
            a[i] = a[i-1]÷2
        else
            a[i] = a[i-1]-3
        end
    end
    if abs(a[1]) != abs(a[3]) && abs(a[2]) != abs(a[4]) && abs(a[3]) == abs(a[5])
        append!(a1_candidates, a1)
    end
end

println(a1_candidates)
sum(abs.(a1_candidates))
Output
Any[-24, -9, 6, 7, 8, 10]
64
설명
  • 모든 항이 정수라는 문제 조건 같은 것을 보면 계산하기 제일 쉽다. 사실 실수가 다루기 어려운 거지, 정수에 대해서는 아주 여유로운 초항 범위에 대해서 스캔해주면 된다
  • (나)의 조건에서 어차피 $a_n$은 $a_5$까지만 계산하면 되므로, 아주 쉽다
  • 가능한 초항은 [-24, -9, 6, 7, 8, 10] 이다
  • 근데 (가) 조건을 읽으면 수능에서까지 $a_n = 0$ 또는 $|a_n|$이 짝수인 경우 라고 쓰고 있는데 ㅋㅋ 왜 도대체 어떤 이유에서 그냥 짝수라고 하면되지, $0$을 따로 분리해서 말하는지 모르겠다

이렇게 해서 수능 공통문제에 대한 것들은 대략 마쳤다. 처음 해 본 시도였는데, 덕분에 Symbolics도 써보고 유익한 경험이었다. 다음으로는 선택문제들을 풀게 될 것인데, 아마도 기하와벡터가 제일 쉬울것 같으므로 기하와벡터 문제들부터 커버하겠다.

반응형