728x90
문제
분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자.
두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다.
입력
첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.
출력
첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈 칸을 사이에 두고 순서대로 출력한다.
풀이
수행 순서는 다음과 같다.
1. 주어진 두 분수의 합을 구한다.
2. 분자와 분모의 최대공약수를 구한다.
3. 분자와 분모를 최대공약수로 나눈 후 출력한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine();
String b = br.readLine();
String[] aArr = a.split(" ");
String[] bArr = b.split(" ");
int A = Integer.parseInt(aArr[0]);
int B = Integer.parseInt(aArr[1]);
int C = Integer.parseInt(bArr[0]);
int D = Integer.parseInt(bArr[1]);
// 분자
int E = (A * D) + (C * B);
// 분모
int F = B * D;
// 최대공약수
int G = getGCD(F, E);
System.out.println(E / G + " " + F / G);
}
public static int getGCD(int num1, int num2) {
if(num1 % num2 == 0) {
return num2;
}
return getGCD(num2, num1%num2);
}
}
'백준' 카테고리의 다른 글
[백준] 4134번 : 다음 소수 - JAVA (0) | 2023.09.12 |
---|---|
[백준] 2485번 : 가로수 (1) | 2023.09.07 |
[백준] 13241 : 최소공배수 (0) | 2023.09.07 |
[백준] 1934번 : 최소공배수 (0) | 2023.09.07 |
[백준] 10816번 : 숫자 카드 2 (0) | 2023.09.07 |