문제
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), b = sc.nextInt();
System.out.println(gcd(a,b));
System.out.println(a*b/gcd(a,b));
}
static int gcd(int a, int b) {
if(b == 0) {
return a;
}
else {
return gcd(b, a%b);
}
}
}
아마 나도 유클리드 호제법을 몰랐으면 for문으로 시도하고 시간초과를 경험했을 것이다.
재귀알고리즘을 이용한 유클리드호제법의 가장 대표적인 문제 같다.
'백준문제풀이' 카테고리의 다른 글
백준 1439 자바(java) 뒤집기 (0) | 2021.03.02 |
---|---|
백준 2847 자바(java) 게임을 만든 동준이 (0) | 2021.03.02 |
백준 1874 자바(java) 스택 수열 (0) | 2021.03.02 |
백준 10828 자바(java) 스택 구현 (0) | 2021.03.02 |
백준 1929 자바(java) 소수 구하기 (0) | 2021.03.02 |