mun dev

[백준] 1735 분수합 자바(Java) 본문

알고리즘/백준

[백준] 1735 분수합 자바(Java)

mndev 2023. 6. 20. 23:55

문제설명

분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자.

두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다.

 

입력

첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.

 

출력

첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈 칸을 사이에 두고 순서대로 출력한다.

 

 

통과한 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        int arr[][]=new int[2][2];
        int num,den;
        for(int i=0; i<2; i++){
            for(int j=0; j<2; j++){
                arr[i][j]=sc.nextInt();
            }
        }

        if(arr[0][0]==arr[1][0]){
            num=arr[0][0]+arr[1][0];
            den=arr[0][0];
        }else{
            arr[0][0]=arr[0][0]*arr[1][1];
            arr[1][0]=arr[1][0]*arr[0][1];

            num=arr[0][0]+arr[1][0];
            den=arr[0][1]*arr[1][1];
        }

        int mod=gcd(num,den);
        num/=mod;
        den/=mod;

        System.out.println(num+" "+den);
    }
    // 유클리드 호제법
    public static int gcd(int a, int b) {
        // a가 b보다 큰 경우에 대해서 유클리드 호제법
        if (a <= b) {
            int temp = a;
            a = b;
            b = temp;
        }

        if (b == 0) {
            return a;
        }
        return gcd(b , a % b);
    }
}