(Java)프로그래머스 - N개의 최소공배수

윤준혁·2024년 4월 2일

나의 풀이

class Solution {
    public static int getGCD(int num1, int num2) { // 1
        if (num1 % num2 == 0) {
            return num2;
        }
        return getGCD(num2, num1 % num2);
    }
    
    public int solution(int[] arr) {
        if (arr.length == 1) { // 2
            return arr[0];
        }
        
        int gcd = getGCD(arr[0], arr[1]); // 3
        int lcm = (arr[0] * arr[1]) / gcd; // 4

        for (int i = 2; i < arr.length; i++) { // 5
            gcd = getGCD(lcm, arr[i]);
            lcm = (lcm * arr[i]) / gcd;
        }
        
        return lcm;
    }
}

과정

유클리드 호제법 <- 이걸 참고하세요
1. 최대공약수 구하는 법
2. arr의 길이가 1이면 arr의 요소 바로 리턴
3. 최대 공약수를 구해주고(gcd)
4. 최소 공배수를 구해준다(lcm)
5. arr을 순회하며 lcm과 arr[i]의 최소 공배수를 구해준다

다른 사람 풀이

class NLCM {
    public long nlcm(int[] num) {
        long answer = num[0], g;
        for (int i = 1; i < num.length; i++) {
            g = gcd(answer, num[i]);
            answer = g * (answer / g) * (num[i] / g);
        }
        return answer;
    }

    public long gcd(long a, long b) {
        if (a > b)
            return (a % b == 0) ? b : gcd(b, a % b);
        else
            return (b % a == 0) ? a : gcd(a, b % a);
    }

    public static void main(String[] args) {
        NLCM c = new NLCM();
        int[] ex = { 2, 6, 8, 14 };
        // 아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println(c.nlcm(ex));
    }
}

0개의 댓글