https://www.acmicpc.net/problem/19532
연립방정식을 풀면되는 문제이다. x,y가 각각 -999 ~ 999까지이기 때문에 반복문을 통해 연립방정식에 맞는 x,y 값을 구해도 1초안에는 해결할 수 있을 것이라고 생각해서 그렇게 풀어보았다.
여기서 최적화를 해보자면 수학적인 방법을 통하여 x,y를 구해보자. 이때 크래머의 법칙을 사용하면 된다. 크래머의 법칙은 2개의 미지수를 포함하는 2개의 방정식을 행렬로 나타내고, 이를 통해 해를 구하는 방식이다.
행렬연산을 통해 도출 된 위의 식을 풀면 되는 것이다. 이떄 ae-bd는 0이 아니어야한다.
정답코드
#include "iostream"
using namespace std;
int main()
{
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
for (int x = -999; x <= 999; x++)
{
for (int y = -999; y <= 999; y++)
{
if ((a * x + b * y) == c && (d * x + e * y) == f)
{
cout << x << " " << y << endl;
break;
}
}
}
return 0;
}
정답코드2 - 크래머의 법칙사용
#include <iostream>
using namespace std;
int main() {
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
int denominator = a * e - b * d;
// 분모가 0이 아닌 경우에만 해가 존재함
if (denominator != 0) {
int x = (c * e - b * f) / denominator;
int y = (a * f - c * d) / denominator;
cout << x << " " << y << endl;
}
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]1193번. 분수찾기 (2) | 2024.09.18 |
---|---|
[백준][C++]2839번. 설탕 배달 (0) | 2024.09.17 |
[백준][C++]2231번. 분해합 (0) | 2024.09.12 |
[백준]2798번. 블랙잭 (0) | 2024.09.12 |
[백준][C++]2292번. 벌집 (0) | 2024.09.11 |