[백준 BOJ] 19532. 수학은 비대면강의입니다 (UCPC 2020 qualifier A)
07 Jul 2021난이도
Bronze II
문제 풀이
해가 1개로 유일하게 존재하는 일차 연립 방정식의 해를 구해 출력하는 문제이다.
\[ax + by = c\] \[dx + ey = f\]
두 개의 식은 각각 하나의 직선으로 생각할 수 있다. \(\frac{a}{d} = \frac{b}{e}\)인 경우 두 직선이 만나지 않거나 무한히 많이 해를 가질 수 있는데, 문제에서는 해가 1개로 유일하다고 했으니, 역행렬을 사용해서 해를 구해도 문제가 없다. 따라서, 역행렬을 이용해 해를 구하도록 할 것이다.
\[\begin{bmatrix}a & b \\d & e \end{bmatrix} \left(\begin{array}{c}x\\ y\end{array}\right) = \left(\begin{array}{c}c\\ f\end{array}\right)\] \[\left(\begin{array}{c}x\\ y\end{array}\right) = \begin{bmatrix}a & b \\d & e \end{bmatrix}^{-1}\left(\begin{array}{c}c\\ f\end{array}\right)\] \[\left(\begin{array}{c}x\\ y\end{array}\right) = \frac{1}{ae-bd}\begin{bmatrix}e & -b \\-d & a \end{bmatrix}\left(\begin{array}{c}c\\ f\end{array}\right)\]
이것을 그대로 코드로 짜면, 아래와 같이 짤 수 있다.
int a, b, c, d, e, f; //input
cin >> a >> b >> c >> d >> e >> f;
int dn = a * e - b * d;
cout << (int)((e * c - b * f) / dn) << " " << (int)((a * f - c * d) / dn);