본문 바로가기

수능문제풀이

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

앞으로 이 카테고리에는 수능 수학문제 풀이를 할 것이다. 손으로 푸는 것은 아니고, 최대한 내 인간적 수학지식(?)을 적게 써가면서 풀어갈 예정이다. 수치관련된 코딩을 하는데에 도움을 줄 것이라고 스스로 핑계를 대고 재미로 올리는 것이니, 재밌게 봐줬으면 한다. 고등학생이라면, 새로운 시선에서 문제를 볼 수 있을 것이고 컴퓨터가 문제를 어떻게 해결할 수 있는지에 대해서 볼 수 있을 것이다. 그냥 지나가던 사람이라면, Julia 라는 프로그래밍 언어의 편리한 기능들을 위주로 볼 수 있으면 좋을 것 같다.

개선해야할 점
  • 블로그에서 코드를 복붙해서 실행하는 것, 나도 굉장히 싫어한다. 코드를 블로그 내에서 실행할 수 있도록 스크립트가 넣어진 것을 훨씬 선호하는데, 지금 Julia에 대해서 임베딩 하는 방법을 잘 모르겠어서 이렇게 남겨둔다. 나중엔 내 블로그에서 코드가 실행될 수 있도록 개선할 예정이다.
  • 지금 코드블럭 클래스에서 지원하는 Julia syntax highlighting이 먼가 심심하다. 이것도 수동으로 나중에 바꿀까 생각중이다.

내 주피터 노트북 하이라이팅은 예쁜데, 블로그는 영 시원찮다.

주피터 노트북 줄리아 syntax

예시로 1번 문제를 보자면

문제 1.

$\sqrt[3]{5} \times 25^{1/3} $ 의 값은?

Code
ans = 5^(1/3)*25^(1/3)
Output
4.999999999999999

과 같은 형식으로 작성할 것이다. 여기서 들어간 지식은 없다. 단순 계산이다.

문제 2.

함수 $f(x) = x^3 - 8x + 7$ 에 대하여 $\lim_{h \rightarrow 0} \frac{f(2+h) - f(2)}{h}$ 의 값은?

Code
using Zygote

f(x) = x^3 - 8x + 7
ans = f'(2)
Output
4.0

Julia 에서 대입 연산자의 evaluation 결과는, 해당하는 변수의 "값" 이므로 output이 그대로 출력됩니다.
여기서 쓴 지식은 오른쪽에 해당하는 식이 미분 계수 $f'(2)$ 에 해당해서 그냥 사용했는데, 이 정도 지식은 그냥 사용하려고 합니다. 정 불만이 있다면,

Code
f(x) = x^3 - 8x + 7
h = 1e-8
(f(2+h) - f(2))/h
Output
3.999999975690116

문제 3.

첫째항과 공비가 모두 양수 $k$ 인 등비수열 ${a_n }$이
$$
\frac{a_4}{a_1} + \frac{a_2}{a_1} = 30
$$
을 만족시킬 때, $k$의 값은?

Code
using Roots

a(k, n::Int64) = k^n
f(k) = a(k, 4)/a(k, 2) + a(k, 2)/a(k, 1) - 30
ans = find_zero(f, (0.001, 100000))
Output
5.0
사용된 수학지식
  • 첫째항과 공비가 모두 양수 $k$ 인 등비수열의 일반항 $a_n = k^n$ 이다.

그 외에는 $k$를 미지수로 두고, Julia의 Roots 라는 패키지를 사용해서 $k$ 가 양수라고 했으므로, 0.001에서 100000 범위까지 에서 해를 찾았다.

문제 4.

함수
$$
f(x) =
\begin{cases}
5x + a \qquad (x < -2) \\
x^2 - a \qquad (x \geq -2)
\end{cases}
$$
가 실수 전체의 집합에서 연속일 때, 상수 $a$ 의 값은

Code
using Roots

f1(x, a) = 5x + a 
f2(x, a) = x^2 - a
f(a) = f1(-2, a) - f2(-2, a)
ans = find_zero(f, 6.0)
Output
7.0
사용된 수학지식
  • f(x) 가 연속이기 위해서는 지금 함수의 분기점이 생기는 x = -2 에서 위의 정의와 아래의 정의에서 함숫값이 같아야 한다.

그 값을 정답지가 시작하는 숫자 6에서 초기화 하고 찾았지만, 그냥 찾아도 문제 없다.

문제 5.

함수 $f(x) = (x^2 + 1)(3x^2 - x)$에 대하여 $f'(1)$의 값은?

Code
using Zygote

f(x) = (x^2 + 1)*(3x^2 - x)
ans = f'(1)
Output
14.0

문제 6.

$\cos(\frac{\pi}{2} + \theta) = -\frac{1}{5} $ 일 때, $\frac{\sin{\theta}}{1 - \cos^2{\theta}}$ 의 값은?

Code
f(θ) = cos(π/2 + θ) + 1/5
θ = find_zero(f, 0)
ans = sin(θ) / (1 - cos(θ)^2)
Output
4.999999999999996

네 맞습니다. 줄리아에서 코딩할 때, 변수명으로 저런 유니코드 문자 $\theta$ 같은 것들 쓸 수 있어서 편합니다.

문제 7.

다항함수 $f(x)$가 모든 실수 $x$ 에 대하여
$$
\int_0^x f(t)dt = 3x^3 + 2x
$$
를 만족시킬 때, $f(1)$의 값은?

Code
using Zygote

F(x) = 3x^3 + 2x
f(x) = F'(x)
ans = f(1)
Output
11.0
사용된 수학지식
  • 오른쪽 함수의 도함수가 $f(x)$이다.

문제 8.

두 실수 $a = 2\log \frac{1}{\sqrt{10}} + \log_2 20$, $b = \log 2$에 대하여 $a \times b$ 의 값은?

Code
a = 2log10(1/sqrt(10)) + log(2, 20)
b = log10(2)
ans = a*b
Output
1.0

문제 9.

함수 $f(x) = 3x^2 - 16x - 20$에 대하여
$$
\int_{-2}^a f(x)dx = \int_{-2}^0 f(x)dx
$$
일 때, 양수 $a$의 값은?

Code
function F(f, a, b; N)
    discrete_range = [a + (b - a)*i/N for i in 1:N]
    sum(f.(discrete_range)) * (b - a)/N
end

ans_range = [i for i in 1:20]

f(x) = 3x^2 - 16x - 20

map_to_integral = a -> F(f, -2, a;N=100000)
comparsion_target = F(f, -2, 0;N=100000)
integral_vec = map_to_integral.(ans_range)
ans = ans_range[findfirst(x -> abs(x-comparsion_target) < 0.01, integral_vec)]
Output
10
주의할 점
  • 현재 보기를 바탕으로 해가 될 수 있는 값들을 1~20 까지의 정수로 제한하고 있다
  • Ff의 밑면적을 근사하는 함수이다. 그러나 기울기가 심한 구간이 있는 함수일 경우에, 저렇게 적분 구간을 동일하게 나누면 수치적으로 부정확함이 클 수 밖에 없고 따라서 우변의 계산값 0과 좌변의 계산값의 오차가 유의미하기 그 차이가 0.01 미만이면 정답이라고 했다.

수치적계산을 해주는 패키지들을 쓰면 보다 정확하게 계산할 수도 있다. (앞으로는 별로 사용하지 않을 예정이다)

Code
using Integrals

f(x) = 3x^2 - 16x - 20
ans_vec = [16, 14, 12, 12, 10, 8]
map_to_integral = a -> solve(IntegralProblem((x, p) -> f(x), -2, a), QuadGKJL()).u
comparsion_target = solve(IntegralProblem((x, p) -> f(x), -2, 0), QuadGKJL()).u
integral_vec = map_to_integral.(ans_vec)
ans = ans_vec[findall(x -> abs(x-comparsion_target) < 0.000001, integral_vec)]
Output
10

패키지 Integrals를 사용하여 풀 경우에 에러 허용치를 매우 낮춘 0.0000001에 대해서도 정답을 찾아주는 것을 볼 수 있다.

문제 10.

닫힌구간 $[0, 2\pi]$ 에서 정의된 함수 $f(x) = a\cos{bx} + 3$ 이 $x = \frac{\pi}{3}$에서 최댓값 $13$을 갖도록 하는 두 자연수 $a, b$의 순서쌍 $(a, b)$ 에 대하여 $a + b$ 의 최솟값은?

Code
variable_pool = [(a, b) for a in 1:10 for b in 1:10]
f(x; a, b) = a*cos(b*x) + 3
gridsize = 10000
discretized_range = [2π*i / gridsize for i in 1:gridsize]

ans_pool = []

for pair in variable_pool
    (a, b) = pair
    mapping_fn = x -> f(x; a, b)
    fn_value_pool = mapping_fn.(discretized_range)
    maxval = maximum(fn_value_pool)
    maxargs = discretized_range[abs.(fn_value_pool .- maxval) .< 0.1]

    if abs(maxval - 13) < 0.1 && any(abs.(maxargs .- π/3) .< 0.1)
        push!(ans_pool, (a, b))
    end
end

ans = minimum((x -> x[1] + x[2]).(ans_pool))
Output
16
설명
  • 자연수 순서쌍 $(a, b)$의 범위는 $(1,1)$에서 $(10,10)$ 까지 100개로 설정헀다. $a$가 10이 넘어가면 최댓값이 $13$인 것을 만족 못해서 의미가 없고, 나머지는 그냥 넉넉하게 설정했다.
  • 닫힌구간 $[0, 2\pi]$ 내에서 최대한 잘게 쪼갠 값들에 대해서 함숫값을 계산하고, 그 값의 최대치가 거의 13 그리고 최댓값을 갖게하는 $x$가 $\pi/3$에 가까운 값이 존재하는 지를 체크했다. (최댓값을 갖게하는 x 들은 저 닫힌 구간에서 많기 때문에 유일성으로 체크되는 참 거짓으로는 답을 얻을 수 없다)

문제 11.

시각 $t=0$일 때 출발하여 수직선 위를 움직이는 점 $P$의 시각 $t(t \geq 0)$에서의 위치 $x$가
$$
x = t^3 - \frac{3}{2}t^2 - 6t
$$
이다. 출발한 후 점 $P$의 운동 방향이 바뀌는 시각에서의 점 $P$의 가속도는?

Code
using Zygote
using Roots

x(t) = t^3 - 3/2*t^2 - 6t
x''(find_zero(x', (0, 100)))
Output
9.0
사용된 수학 지식
  • 운동 방향이 바뀌는 시점에서 $x'(t) = 0$ 이다. 그리고 가속도는 2차 미분함수인 $x''(t)$로 주어진다.

여기까지 해서 마치고 다음 포스트에서는 좀 더 재밌는 문제들을 풀 예정이다. 수능 수학 앞부분은 거의 단순계산이라서, 그냥 수식이 말하는 대로 컴퓨터에 입력하면 답을 주지만, 뒷 문제들에 대해서는 그렇지 않다.

반응형