문제
내가 작성한 정답 - 유클리드 호제법 참고
import java.util.*;
class Solution {
public int solution(int a, int b) {
// 최대공약수 구하기
int gcd = findGCD(a, b);
// a와 b를 약분
a /= gcd;
b /= gcd;
// b의 소인수가 2와 5만 존재하는지 확인
while (b % 2 == 0) {
b /= 2; // 2로 나누기
}
while (b % 5 == 0) {
b /= 5; // 5로 나누기
}
// b가 1이면 유한소수, 아니면 무한소수
return (b == 1) ? 1 : 2;
}
// 최대공약수 구하기
private int findGCD(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
유클리드 호제법
public class EuclideanAlgorithm {
// 최대공약수 계산 메서드
public static int gcd(int a, int b) {
while (b != 0) { // b가 0이 아닐 때까지 반복
int temp = b; // b의 값을 temp에 저장
b = a % b; // a를 b로 나눈 나머지를 b에 저장
a = temp; // temp의 값을 a에 저장
}
return a; // a가 최대공약수
}
// 최소공배수 계산 메서드
public static int lcm(int a, int b) {
return Math.abs(a * b) / gcd(a, b); // LCM 계산
}
}
// 최대공약수 계산 메서드
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b); // 삼항 연산자를 사용한 재귀적 호출
}
// 최소공배수 계산 메서드
public static int lcm(int a, int b) {
return (a != 0 && b != 0) ? Math.abs(a * b) / gcd(a, b) : 0; // 삼항 연산자를 사용하여 0 체크
}
Share article