백준 1735 분수 합 [JAVA]

Ga0·2023년 5월 22일
0

baekjoon

목록 보기
53/125

문제 해석

  • 두개의 분수를 입력받는데, 첫번째 줄에는 첫번째 분수의 분자(A)와 분모(B)를 입력받고, 두번째 줄에는 두번째 분수의 분자(A)와 분모(B)을 입력받는다.
  • 두개의 분수를 모두 입력 받았다면 두 분수의 합을 구하면 되는데, 합한 분수의 형태는 기약분수(분모와 분자의 공약수가 1뿐인 분수, 더 이상 약분할 수 없는 형태)여야 한다.

코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int[] aArray = new int[2]; //분자 배열
        int[] bArray = new int[2]; //분모 배열

        for(int i = 0; i < 2; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            aArray[i] = Integer.parseInt(st.nextToken());
            bArray[i] = Integer.parseInt(st.nextToken());
        }

        //최소 공배수 구하기 - 분모 구하기
        int commonB = bArray[0] * bArray[1] / findGCD(bArray[0], bArray[1]);

        //분자 구하기
        int addA = aArray[0]*(commonB/bArray[0]) + aArray[1]*(commonB/bArray[1]);

        int abbreviation = findGCD(commonB, addA); //약분해야할 요소

        if(abbreviation != 1){ //만약 기약 분수가 아닐 경우(공약수가 1이 아닌 경우는 나눌 수 있는 무언가가 있다는 것)
            commonB = commonB/abbreviation;
            addA = addA/abbreviation;
        }

        bw.write(addA + " " +  commonB);

        br.close();
        bw.flush();
        bw.close();
    }

    //최대 공약수 구하기
    static int findGCD(int b1, int b2){
        while(b2 != 0){
            int R = b1%b2;
            b1 = b2;
            b2 = R;
        }
        return b1;
    }
}

결과

느낀 점

  • 전 포스트와 전전 포스트에서 했던 공약수 관련 문제를 하고나서인지 이번 문제는 큰 어려움 없이 해결할 수 있었다.

0개의 댓글