[2021 연세대학교 신입생 프로그래밍 경진대회/C++] : 21868번 미적분학 입문하기 (C번)
https://www.acmicpc.net/problem/21868
21868번: 미적분학 입문하기
첫 번째 줄에는 양수 $\epsilon$을 분수로 표현했을 때의 분자와 분모가 공백으로 구분되어 주어진다. 각 분자와 분모는 $1$ 이상 $10\,000$ 이하의 자연수다. 두 번째 줄에는 일차 이하의 다항함수 $f
www.acmicpc.net
문제해석
단순하게 문제 속 수학식을 살펴보고 입력받은 값으로 계산하여 출력하여 주면 되는 문제이다.
알고리즘 기술과 관련된 지식이 필요하다기 보다는 정말 수학문제를 풀줄 알면 사람이면 누구나 이 문제를 해결할 수 있다.
코드
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include <tuple>
#include <string>
#include <queue>
using namespace std;
int eh, el;
int a, b;
int x0;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> eh >> el;
cin >> a >> b;
cin >> x0;
cout << a * x0 + b <<'\n';
int hh = eh, ll = el * a;
if (!hh || !ll) {
cout << "0 0" << '\n';
}
cout << abs(hh) <<' ' << abs(ll) << '\n';
return 0;
}
문제풀이
먼저 극한값을 구하는건 간단하게 해결할 수 있다. x가 x0에 가까워질때의 극한값이므로 a*x0+b를 해주면 쉽게 구할 수 있다.
그 후 델타값을 구하는건 수학적 지식이 필요한데, 델타는 입실론을 a로 나눈 값이다. 따라서 분자인 hh는 그대로 유지해주고 분모인 ll는 a를 곱해줘야한다. (그래야지 a로 나누는게 됨.)
그런 후 c++ 절댓값 라이브러리 abs() 함수를 사용하여 출력만 해주면 문제를 해결 할 수 있다.
정말 수학 문제 그자체. 아무래도 신입생들을 위한 알고리즘 문제이다보니 이런 수학 유형을 많이 내지 않았을까 싶다.
이번 연습은 3명이서 9문제중 7문제를 풀었다. 마지막에 시간이 좀 더 있었으면 F번을 풀을 수 있었을 거 같은데 아쉬웠다. 나는 오히려 이런 수학공식을 해결하여 문제를 푸는게 좀 더 나한텐 익숙하다. 알고리즘 문제를 많이 풀었기 보단 수학 공부한 기억이 더 많이 남아서가 아닐까 생각한다. 다른 팀원들은 수학 문제에 오히려 약하다고 하니 내가 수학문제가 나오면 맞추려고 노력해야겠다.