[c/c++] 백준 17945 (Bronze 3)

은동·2023년 2월 1일
0

Baekjoon

목록 보기
17/49

🔨 문제

https://www.acmicpc.net/problem/17945
<요약>
이차방정식을 풀면 순간이동권 획득!
x^2 +2Ax+B=0를 만족하는 근을 구하면 됨 (-1000 ≤ A, B ≤ 1000)

조건은 근을 오름차순으로 출력하고, 중근이 나오면 하나만 출력하는 것이다.


🔨 해결방법

  1. 내가 사용한 방법은 근의 공식을 이용하는 것이었다.
    주어진 이차방정식은 x의 계수가 짝수라서 짝수공식을 이용하여 근을 구하면 된다.
    짝수 공식 - https://terms.naver.com/entry.naver?docId=3350164&cid=60210&categoryId=60210

  2. 두번째는 그냥 노가다로 -1000부터 1000까지 대입해서 근을 구하는 것


🔨 코드

  1. 짝수 공식 이용
#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)


  1. 컴파일러 노가다 막노동시키기
#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번이 메모리 효율이 더 좋았다

profile
자자 선수입장~

0개의 댓글