[백준] 19532. 수학은 비대면강의입니다

1 분 소요

문제 링크

[백준] 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;
        }
    }
}

xy 값이 -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);
    }
}

카테고리:

업데이트:

댓글남기기