알고리즘 문제/프로그래머스

N개의 최소공배수 (C#)

우대비 2025. 1. 24. 20:55
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

입력받은 배열에 있는 값들의 최소 공배수를 구해주세요.

 

 

풀이 방법

유클리드 호제법을 이용해서 풀이합니다. 

최소 공배수를 구하는 방법은, 두 수의 최대 공약수를 먼저 찾은 이후에 두 수의 곱에 두 수의 최소 공약수를 나눠주면 됩니다.

 

코드로 풀이하면 아래와 같습니다.

int gcd(int a, int b)  // 최대 공약수 (유클리드 호제법)
{
    if (b == 0)
        return a;

    return gcd(b, a % b);
}

int lcm(int a, int b) // 최소 공배수
{
    return a * b / gcd(a, b); // 절댓값 처리
}

위의 코드를 바탕으로 모든 배열을 순회하면서 풀이하면 됩니다.

 

유클리드 호제법

유클리드 호제법이란 최대 공약수를 쉽게 찾는 방법이라고 설명할 수 있겠습니다.

공약수의 성질을 이용하여 쉽게 찾아냅니다.

A와 B의 공약수 = B와 R의 공약수 *( R = A % B )

이때, R(나머지)이 0이 되면 최대 공약수는 나누는 수 B가 됩니다.

 

int gcd(int a, int b)
{
    if (b == 0)
        return a;

    return gcd(b, a % b);
}

 

 

정답 코드

public class Solution 
{
    int gcd(int a, int b) 
    {
        if (b == 0)
            return a;
        
        return gcd(b, a % b);
    }
    
    int lcm(int a, int b) 
    {
        return a * b / gcd(a, b); // 절댓값 처리
    }
    
    public int solution(int[] arr) {
        
        int answer = 1;
        for (int i = 0; i < arr.Length; i++)
            answer = lcm(answer, arr[i]);
            
        return answer;
    }
}

 

반응형
LIST