본문 바로가기
코딩테스트/자바

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

by 커피는아아 2024. 4. 21.
반응형

BOJ 19532: 수학은 비대면강의입니다 - 풀이

문제 설명

백준 온라인 저지의 문제 19532번 "수학은 비대면강의입니다"는 연립방정식을 푸는 문제입니다. 두 개의 1차 방정식이 주어졌을 때, 그 해를 구하는 문제입니다.

주어진 방정식은 다음과 같습니다:

  • ( ax + by = c )
  • ( dx + ey = f )

여기서 ( a, b, c, d, e, f )는 정수로 주어집니다. 우리는 이 방정식을 만족하는 ( x )와 ( y )를 찾아야 합니다. 모든 입력값은 -999부터 999 사이의 정수입니다.

문제 접근 방법

이 문제는 두 개의 1차 방정식을 만족하는 ( x )와 ( y )를 찾는 문제입니다. 이를 위해 이중 반복문을 사용하여 가능한 모든 ( x )와 ( y ) 값을 대입하여 해를 찾는 방식으로 접근할 수 있습니다.

접근 방식

  1. 입력값 읽기:
    • 입력값을 읽어와서 ( a, b, c, d, e, f )에 저장합니다.
  2. 이중 반복문 사용:
    • ( x )와 ( y )의 범위가 -999부터 999까지이므로, 이중 반복문을 사용하여 이 범위 내의 모든 값에 대해 연립방정식을 확인합니다.
  3. 해 검증:
    • 각각의 ( x )와 ( y )에 대해 두 방정식을 만족하는지 확인합니다.
    • 만족하는 경우 해당 ( x )와 ( y )를 출력합니다.

시간 복잡도 분석

이 접근 방식은 가능한 모든 해를 탐색하기 때문에 최적화는 되어 있지 않습니다. 이중 반복문을 사용하여 ( x )와 ( y )의 모든 조합을 확인하므로 시간 복잡도는 ( O(N^2) )입니다. 여기서 ( N )은 ( x )와 ( y )의 범위입니다. 문제의 입력 범위가 -999부터 999까지이므로 ( N )은 1999가 됩니다.

따라서 시간 복잡도는 ( O(N^2) )입니다. 실제로는 약 ( 3,996,001 )번의 연산을 수행하지만, 이는 현대 컴퓨터에서는 충분히 빠르게 처리할 수 있는 양입니다.

이 접근 방식은 가능한 모든 해를 탐색하기 때문에 최적화는 되어 있지 않지만, 문제의 입력 범위가 작기 때문에 실행 시간이 충분히 빠릅니다.

해결 방법

아래는 이 문제를 해결하기 위한 Java 코드입니다:

package week_01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * 연립방정식 문제
 */
public class BOJ_19532_수학은_비대면강의입니다 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = Arrays.stream(String.valueOf(br.readLine()).split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        int a = arr[0];
        int b = arr[1];
        int c = arr[2];
        int d = arr[3];
        int e = arr[4];
        int f = arr[5];

        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(String.format("%s %s", x, y));
                    return;  // 해를 찾으면 종료
                }
            }
        }
    }
}