[작성일: 2023. 10. 13]
https://www.acmicpc.net/problem/19532
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int d = sc.nextInt();
int e = sc.nextInt();
int f = sc.nextInt();
int x = 0, y = 0;
for (int i = -999; i <= 999; i++) {
for (int j = -999; j <= 999; j++) {
if ((a * i + b * j == c) && (d * i + e * j == f)) {
x = i;
y = j;
}
}
}
System.out.println(x + " " + y);
}
}
연립방정식은 둘 이상의 방정식이 동시에 성립되어야 하는 방정식을 의미한다.
x + y = 5, x - y = 1
가 주어졌다면 두 방정식을 만족하는 x는 3, y는 2이다.
이 문제를 보자마자 for문을 사용해서 풀어야겠다 생각하고 풀었는데 정답이었다.
그런데 x와 y를 찾는 공식을 안다면 for문을 사용하지 않아도 이 문제를 풀 수 있다고 한다.
우선 주어진 연립 방정식을 행렬로 나타낸다면 아래와 같다.
이 때,
a b
d e 의 행렬(D)는 ae - bd가 된다.
따라서 x는 아래와 같다.
y도 똑같이 구할 수 있다. 이걸 코드로 짜면 아래처럼 나온다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int d = sc.nextInt();
int e = sc.nextInt();
int f = sc.nextInt();
int x = (c * e - b * f) / (a * e - b * d);
int y = (a * f - c * d) / (a * e - b * d);
System.out.println(x + " " + y);
}
}