문제 설명
https://www.acmicpc.net/problem/19532
[브루트 포스 문제]
각각 -999 이상이고 999이하인 (x, y)을 찾는 문제 입니다.
모든 경우의 수는 2000 * 2000이라 O($n^2$)인 완전탐색으로 풀어도 되지만 더 깔끔하고 효율적인 방법이
존재합니다.
연립 방정식을 풀 때 서로 다른 방정식의 계수를 맞추어 x 또는 y를 없애 값을 구하는 방법을 사용합니다.
x 값 구하기
연립 방정식의 y 계수를 동일하게 만든 후 x만 남도록 두 방정식을 뺍니다.
$\left\{\begin{matrix}
& ax + by = c \\
& dx + ey = f \\
\end{matrix}\right.
\Rightarrow \left\{\begin{matrix}
& aex + bey = ce \\
& bdx + bey = bf \\
\end{matrix}\right. \Rightarrow (ae-bd)x = ce-bf$
$\\ \therefore x = \frac{ce - bf}{ae - bd}$
Y값 구하기
동일하게 연립 방정식의 x 계수를 동일하게 만든 후 y만 남도록 두 방정식을 뺍니다.
$ \left\{\begin{matrix}
& ax + by = c \\
& dx + ey = f \\
\end{matrix}\right.
\Rightarrow \left\{\begin{matrix}
& adx + bdy = cd \\
& adx + aey = af \\
\end{matrix}\right. \Rightarrow (bd-ae)y = cd-af \\
$
$\\ \therefore y = \frac{cd - af}{bd-ae}$
코드
#include<iostream>
int main()
{
int a, b, c, d, e, f;
std::cin >> a >> b >> c >> d >> e >> f;
int y = (c * d - a * f) / (b * d - a * e);
int x = (c * e - b * f) / (a * e - b * d);
//결과
std::cout << x << ' ' << y;
return 0;
}
'Baekjoon > cpp' 카테고리의 다른 글
1697번 - 숨바꼭질 C++ (0) | 2023.07.09 |
---|---|
2178번 - 미로 탐색 C++ (0) | 2023.07.07 |
2003번 - 수들의 합 2 (0) | 2022.07.04 |
1504번 - 특정한 최단 경로 (0) | 2022.06.29 |
2193번- 이친수 (0) | 2022.05.03 |