[백준] 19532. 수학은 비대면강의입니다
문제 링크
풀이 과정
완전 탐색 접근과 2차 방정식의 특성으로 풀 수 있습니다.
완전 탐색
outer:
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) {
System.out.println(x + " " + y);
break outer;
}
}
}
x
와 y
값이 -999에서 999까지의 범위로 주어졌으므로, 모든 경우를 탐색하며 대입한 값을 확인해봅니다.
연립 방정식
$$\begin{cases}ax+by=c \\dx+ey=f\end{cases}$$
위 연립 방정식 위 식에 d를, 아래식에 a를 곱하면 아래와 같습니다.
$$\begin{cases}adx+bdy=cd\\adx+aey=af\end{cases}$$
각각 d와 e를 곱한 후, 두 식을 빼서 x
를 없애줍니다.
$$bdy-aey=cd-af\\(bd-ae)y=cd-af\\y=(cd-af)/(bd-ae)$$
y
를 문제 입력 a, b, c, d, e, f로 구할 수 있습니다.
$$x=(ce-bf)/(ae-bd)$$
마찬가지로, y
를 소거하면 x
에 대한 식을 구할 수 있습니다. 문제 입력으로 x
값을 구할 수 있습니다.
코드
완전 탐색
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();
outer:
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) {
System.out.println(x + " " + y);
break outer;
}
}
}
}
}
연립 방정식
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 = (c * d - a * f) / (b * d - a * e);
System.out.println(x + " " + y);
}
}
댓글남기기