💡Problem Solving/BOJ

[BOJ 2609] 최대공약수와 최소공배수 (Java)

gom20 2021. 10. 23. 20:30

#문제

https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 

#풀이

유클리드 호제법을 사용한다. 

2개의 자연수의 최대공약수(GCD)를 구하는 알고리즘 이다.

자연수 a와 b (a > b)에서 a를 b로 나눈 나머지를 r이라고 했을 때

GCD(a, b) = GCD(b, r) 이며, r이 0이 되는 순간 b가 최대 공약수가 된다.

최소 공배수는 두 수를 곱한 후 최대 공약수로 나눠주면 구할 수 있다.

 

#소스코드

package math;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ2609 {

    public static void input() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = null;

        st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        sb.append(getGCD(a, b)).append("\n");;
        sb.append(a*b/getGCD(a, b)).append("\n");
        System.out.print(sb.toString());
    }

    public static int getGCD(int a, int b){
        if(b > a){
            int temp = a;
            a = b;
            b = temp;
        }
        while(b != 0){
            int r = a%b;
            a = b;
            b = r;
        }
        return a;
    }

    public static void main(String[] args) throws Exception {
        input();
    }
}

 

'💡Problem Solving > BOJ' 카테고리의 다른 글

[BOJ 1766] 문제집 (Java)  (0) 2021.10.24
[BOJ 20040] 사이클 게임 (Java)  (0) 2021.10.23
[BOJ18870] 좌표 압축 (Java)  (0) 2021.10.22
[BOJ 15900] 나무 탈출 (Java)  (0) 2021.10.21
[BOJ 2056] 작업 (Java)  (0) 2021.10.20