코딩테스트/BOJ

[BOJ] 1735 분수 합 - JAVA

5월._. 2022. 7. 27.
728x90

1. 문제

 

1735번: 분수 합

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

www.acmicpc.net

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

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


2. 풀이

1.  수를 입력받은 후 분수의 합을 분모 분자 각각 구한다.

2.  약분하기 위해서 분모 분자의 최대공약수를 구한다.

3.  분모, 분자를 최대공약수로 나눈 값을 출력한다.

 

최대공약수 : gcd(a,b)==gcd(b,a%b) 식을 이용한다. 만약 a%b==0이라면 gdc(a,b)=b다.

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

public class BOJ_1735_분수합 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      int a1 = Integer.parseInt(st.nextToken());
      int b1 = Integer.parseInt(st.nextToken());
      st = new StringTokenizer(in.readLine());
      int a2 = Integer.parseInt(st.nextToken());
      int b2 = Integer.parseInt(st.nextToken());

      int A = a1*b2+a2*b1;
      int B = b1*b2;

      int g = gcd(A,B);

      System.out.println(A/g+" "+B/g);
   }
   private static int gcd(int a, int b){
      if(a<b){
         int tmp = a;
         a = b;
         b = tmp;
      }

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

}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2004 조합 0의 개수 - JAVA  (0) 2022.07.29
[BOJ] 1965 상자넣기 - JAVA  (0) 2022.07.28
[BOJ] 1309 동물원 - JAVA  (0) 2022.07.25
[BOJ] 18352 특정 거리의 도시 찾기 - JAVA  (0) 2022.07.24
[BOJ] 13565 침투 - JAVA  (0) 2022.07.20

댓글