728x90
1. 문제
분수 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 |
댓글