티스토리 뷰

문제 : https://programmers.co.kr/learn/courses/30/lessons/12953

 

코딩테스트 연습 - N개의 최소공배수

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배

programmers.co.kr

 

풀이과정

먼저, 두 정수의 최소공배수를 계산하는 수식을 살펴보면 다음과 같다.

이 식을 통해 두 정수의 GCD를 알면 LCM을 계산할 수 있음을 확인 할 수 있다. 이 때, GCD를 계산하는 방법으로

유클리드 호제법(https://en.wikipedia.org/wiki/Euclidean_algorithm)을 활용하면 굉장히 간결하게 문제풀이를 진행 할 수 있다.

 

문제 풀이의 진행은 주어진 정수 배열에 대해서 앞에서부터 두 원소를 선택하여 두 수의 LCM을 구하는 방식을 반복 진행하는 방식으로 수행하였다. 주어진 정수 배열의 길이가 1일 경우에 대해서 IndexOutOfBoundException에 주의하는 것 외에 별다른 포인트는 없었던 것 같다.

 

소스코드

class Solution {

    public int solution(int[] given) {
        int[] arr = given.clone();
        for (int i = 1; i < arr.length; i++) {
            arr[i] = (arr[i - 1] / gcd(arr[i - 1], arr[i])) * arr[i];
        }

        return arr[arr.length - 1];
    }

    private int gcd(int a, int b) {
        // Assume a >= b
        if (a < b) {
            int temp = a;
            a = b;
            b = temp;
        }

        return b == 0? a : gcd(b, a % b);
    }
}

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함