백준

[백준] 1735번 : 분수 합

doomole 2023. 9. 7. 15:53
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