백준

백준 1735 분수 합(Java)

Park DJ 2023. 2. 3. 17:13

https://www.acmicpc.net/problem/1735

 

1735번: 분수 합

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 최소공배수만 구할 수 있으면 쉽게 풀 수 있습니다. 유클리드 호제법에 따라 두수 a와 b가 주어졌을 때 최소공배수는 a * b / 최대공약수이므로 최대공약수를 구하면 됩니다. 최소공배수를 구했으면 두 분수의 분모를 최소공배수로 맞추어서 더해줍니다. 그다음 분자와 분모의 최대공약수를 구해서 나누어주면 되는 문제입니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int a = sc.nextInt();
    int b = sc.nextInt();
    int c = sc.nextInt();
    int d = sc.nextInt();

    int down = b * d / gcd(b, d);
    int up = (a * (down / b) + c * (down / d));

    int n = gcd(down, up);

    down /= n;
    up /= n;
    
    System.out.println(up+" "+down);
  }

  static int gcd(int x, int y) {
    if(y == 0) return x;
    return gcd(y, x % y);
  }
  
}