반응형
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 ) 값을 대입하여 해를 찾는 방식으로 접근할 수 있습니다.
접근 방식
- 입력값 읽기:
- 입력값을 읽어와서 ( a, b, c, d, e, f )에 저장합니다.
- 이중 반복문 사용:
- ( x )와 ( y )의 범위가 -999부터 999까지이므로, 이중 반복문을 사용하여 이 범위 내의 모든 값에 대해 연립방정식을 확인합니다.
- 해 검증:
- 각각의 ( 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; // 해를 찾으면 종료
}
}
}
}
}
'코딩테스트 > 자바' 카테고리의 다른 글
[백준 1090] 체커 (자바) (0) | 2024.06.29 |
---|---|
[백준 2503] 숫자야구 (자바) (0) | 2024.06.29 |
[백준 14568] 2017_연세대학교_프로그래밍_경시대회 (자바) (0) | 2024.04.11 |
[백준 1816] 암호키 (자바) (0) | 2024.04.07 |
[프로그래머스] 게임 맵 최단거리(level2) (자바) (0) | 2021.11.14 |