본문 바로가기

백준문제풀이

백준 2609 자바(java) 최대공약수와 최소공배수

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 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문으로 시도하고 시간초과를 경험했을 것이다.

재귀알고리즘을 이용한 유클리드호제법의 가장 대표적인 문제 같다.