https://www.acmicpc.net/problem/2609
접근 방법
최대 공약수의 경우 유클리드 호제법을 적용하였다.
a와 b의 최대 공약수를 구할 때,
a와 b 나눠 나머지가 생기면
b와 그 나머지를 다시 나누고 그렇게 생긴 나머지를
처음 나머지와 그 다음 나머지를 다시 나누고....
나머지가 없을 때까지 나누는데 이 때 나머지가 없을 때의 나눈 값이 최대공약수가 된다.
(자세한 내용은 여기)
최소 공배수는 a와 b를 최대공약수로 나누고 그 값들을 곱한 값이 된다.
즉, 최소 공배수 = 최대 공약수 * (a / 최대 공약수) * (b / 최대 공약수)
최종 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int gcd = euclid(a, b);
int lcm = lcm(a, b);
System.out.println(gcd);
System.out.println(lcm);
}
private static int lcm(int a, int b) {
int gcd = euclid(a, b);
int total = gcd * (a / gcd) * (b / gcd);
return total;
}
private static int euclid(int a, int b) {
int num = b;
while (num != 0) {
if (a % num != 0) {
int temp = a;
a = num;
num = temp % num;
} else {
break;
}
}
return num;
}
}
반응형
'Tech > Problem Solving' 카테고리의 다른 글
[백준 2661] 좋은 수열 (Java) (2) | 2020.02.11 |
---|---|
[백준 14889] 스타트와 링크 (Java) (0) | 2020.02.07 |
[백준 1978] 소수 찾기 (Java) (0) | 2020.02.06 |
[백준 9663] N-Queen (Java) (0) | 2020.02.05 |
[백준 1182] 부분수열의 합 (Java) (0) | 2020.01.30 |