문제 해석
- 두개의 분수를 입력받는데, 첫번째 줄에는 첫번째 분수의 분자(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){
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;
}
}
결과
느낀 점
- 전 포스트와 전전 포스트에서 했던 공약수 관련 문제를 하고나서인지 이번 문제는 큰 어려움 없이 해결할 수 있었다.