문제 개요
곡선 y = x(A − x)가 주어졌을 때, 이 곡선 위의 특정 점 (x, y)에서의 접선 방정식을 구하는 것이 목표입니다. 여기서 A는 정수이며, 좌표 x와 y 역시 모두 정수입니다.
풀이 접근
1단계: 점이 곡선 위에 있는지 확인
접선은 곡선 위의 점에서만 정의되므로, 먼저 주어진 점 (x, y)가 곡선의 방정식 y = Ax − x²를 만족하는지 검사해야 합니다. 만족하지 않는다면 해당 점에서의 접선은 존재하지 않습니다.
2단계: 미분으로 기울기 구하기
곡선 y = x(A − x)를 x에 대해 미분하면 다음과 같습니다.
dy/dx = A − 2x
이 값이 바로 점 (x, y)에서의 접선의 기울기(m)입니다.
3단계: 점-기울기 공식 적용
점 (x, y)와 기울기 m을 알고 있으므로 점-기울기 공식으로 접선의 방정식을 세울 수 있습니다.
Y − y = m × (X − x)
이를 기울기-절편 형태로 정리하면 Y = mX + (y − mx)이므로, 상수항 c = y − mx만 계산하면 됩니다.
C++ 구현
#include <iostream>
using namespace std;
// 곡선 y = x(A - x) 위의 점 (x, y)에서의 접선 방정식을 출력하는 함수
void getTangent(int A, int x, int y) {
// 1. 주어진 점이 곡선 위에 있는지 확인
if (y != A * x - x * x) {
cout << "해당 점은 곡선 위에 존재하지 않습니다." << endl;
return;
}
// 2. 미분값(A - 2x)으로 기울기 계산
int m = A - 2 * x;
// 3. y절편 계산: c = y - m * x
int c = y - m * x;
cout << "y = ";
if (m > 0)
cout << m << "x";
else if (m < 0)
cout << "-" << -m << "x";
if (c > 0)
cout << " + " << c;
else if (c < 0)
cout << " - " << -c;
cout << endl;
}
int main() {
int A = 2, x = 2, y = 0;
cout << "접선의 방정식: ";
getTangent(A, x, y);
return 0;
}
실행 결과
접선의 방정식: y = -2x + 4
코드 설명
- 곡선 위 점 검증: y ≠ Ax − x²이면 함수가 즉시 안내 메시지를 출력하고 종료합니다. 원래 예제에서는 이 경우 아무런 출력이 없었지만, 사용자에게 명확한 피드백을 제공하도록 개선했습니다.
- 기울기 계산: 미분 결과인 A − 2x를 그대로 코드로 옮겨 접선의 기울기를 구합니다.
- 부호 처리: 기울기와 절편의 부호에 따라 +, − 기호를 적절히 붙여 수학적으로 올바른 방정식 형태를 출력합니다.
복잡도 분석
이 풀이는 단순한 산술 연산만 수행하므로 시간 복잡도는 O(1), 추가 메모리 사용량 또한 O(1)입니다.