[BOJ] 2609 최대공약수와 최소공배수 JAVA

popolarburr·2023년 3월 3일
0
post-thumbnail

- 문제



- 풀이

유클리드 호제법을 사용한 문제풀이 두 가지 존재.

  • 1) 반복문 사용



import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] arr = sc.nextLine().split(" ");
        int num1 = Integer.parseInt(arr[0]);
        int num2 = Integer.parseInt(arr[1]);

        int result1 = gcd(num1, num2);
        int result2 = (num1 * num2) / result1;
        System.out.println(result1);
        System.out.println(result2);
    }

    public static int gcd(int a, int b) {
        while (b != 0) {

            int r = a % b;
            a = b;
            b = r;
        }
        return a;
    }

}

  • 재귀함수 사용


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] arr = sc.nextLine().split(" ");
        int num1 = Integer.parseInt(arr[0]);
        int num2 = Integer.parseInt(arr[1]);

        int result1 = gcd(num1, num2);
        int result2 = (num1 * num2) / result1;
        System.out.println(result1);
        System.out.println(result2);
    }

    public static int gcd(int a, int b) {
        if(b==0) return a;
        return gcd(b, a%b);
    }

}

- 정리

사실 유클리드 호제법을 이 문제로 공부함으로써 풀게되었고, 포스팅해두었다. 그래서 문제푸는 어려움은 없었으나

재귀함수 사용과 반복문 사용에 과연 어떠한 결과 차이가 있을까?

에 대한 궁금증이 생겨 두 번 풀어 결과를 비교했다.


가운데 런타임에러는 내가 오타를 내서 오류가 났음..


결과만 보면 메모리에서 아주 작은 차이만 있고 시간면에선 동일했다. 즉, 원하는 것을 사용하면 될 듯.



[링크] : 깃허브

profile
차곡차곡

0개의 댓글