문제: https://www.acmicpc.net/problem/1735
1. 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] ab = new int[2][2];
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++)
ab[i][j] = sc.nextInt();
}
ab[0][0] *= ab[1][1];
ab[1][0] *= ab[0][1];
ab[0][1] *= ab[1][1];
int[] answer = { ab[0][0] + ab[1][0], ab[0][1] };
int GCD = gcd(Math.max(answer[0], answer[1]), Math.min(answer[0], answer[1]));
for(int n : answer)
System.out.print(n / GCD + " ");
}
private static int gcd(int a, int b) {
if(b == 0) return a;
return gcd(b, a % b);
}
}
2. 설명
ab[0][0] *= ab[1][1];
ab[1][0] *= ab[0][1];
ab[0][1] *= ab[1][1];
int[] answer = { ab[0][0] + ab[1][0], ab[0][1] };
분수의 합을 진행합니다.
int GCD = gcd(Math.max(answer[0], answer[1]), Math.min(answer[0], answer[1]));
for(int n : answer)
System.out.print(n / GCD + " ");
분모와 분자의 최대공약수를 gcd 함수를 통해서 도출한 뒤 나누어주면 문제는 해결됩니다.
3. 정리
- 유클리드 호제법을 적절히 활용하자
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 - 4134번: 다음 소수 [Java] (0) | 2023.09.22 |
---|---|
백준 알고리즘 - 2485번: 가로수 [Java] (0) | 2023.09.21 |
백준 알고리즘 - 13241번: 최소공배수 [Java] (0) | 2023.09.18 |
백준 알고리즘 - 11478번: 서로 다른 부분 문자열의 개수 [Java] (0) | 2023.09.17 |
백준 알고리즘 - 1764번: 듣보잡 [Java] (0) | 2023.09.16 |