https://www.acmicpc.net/problem/17945
<요약>
이차방정식을 풀면 순간이동권 획득!
x^2 +2Ax+B=0를 만족하는 근을 구하면 됨 (-1000 ≤ A, B ≤ 1000)
조건은 근을 오름차순으로 출력하고, 중근이 나오면 하나만 출력하는 것이다.
내가 사용한 방법은 근의 공식을 이용하는 것이었다.
주어진 이차방정식은 x의 계수가 짝수라서 짝수공식을 이용하여 근을 구하면 된다.
짝수 공식 - https://terms.naver.com/entry.naver?docId=3350164&cid=60210&categoryId=60210
두번째는 그냥 노가다로 -1000부터 1000까지 대입해서 근을 구하는 것
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
int a, b;
cin >> a >> b;
// 짝수공식
int x = -a + sqrt(a * a - b);
int y = -a - sqrt(a * a - b);
if (x == y) cout << x;
else cout << y << " " << x;
return 0;
}
sqrt(square root) 는 제곱근(x를 제곱하여 a가 되었을 때의 x값) 구할 때 사용한다.
형식은 sqrt(), 예를 들어 루트 25를 구하려고 한다면 sqrt(25)
#include <iostream>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
int a, b;
cin >> a >> b;
for (int i = -1000; i <= 1000; i++) {
if ((i * i) + (2 * a * i) + b == 0) cout << i<< ' ';
}
return 0;
}
둘 다 제출해본 결과
걸린 시간은 똑같고 2번이 메모리 효율이 더 좋았다