본문 바로가기
프로그래머스

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

by LemongO 2024. 5. 9.

📌문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

📌제한 사항

arr은 길이 1이상, 15이하인 배열입니다.
arr의 원소는 100 이하인 자연수입니다.

📌입출력 예

arr result
[2,6,8,14] 168
[1,2,3] 6

🔍유클리드 호제법

이 문제에 적용할 공식이며
두 자연수 A, B의 최대 공약수(GCD)를 찾는 알고리즘이다.
GCD를 찾는 이유는 문제에서 제시된 최소공배수(LCM)을 구하기 위해서이며 공식 설명은 생략한다.

  • LCM = A x B / (GCD)

💡풀이

  • 첫 두 수의 LCM을 구한다.
  • for문을 돌며 나머지 수의 LCM을 계속 구한다.
public int solution(int[] arr) 
{
	if (arr.Length == 1) // 길이가 1 이상이라고 했기 때문에 예외를 둔다.
    	return arr[0];
    
    int answer = LCM(arr[0],arr[1]); // 첫 LCM를 구한다.
    
    if (arr.Length == 2) // 길이가 2일 때 첫 LCM을 반환한다.
    	return answer;
    
    for(int i = 2; i < arr.Length; i++) // 길이가 3이상일 때 answer와 arr[i]의 LCM을 구해 answer를 갱신한다.
    	answer = LCM(answer,arr[i]); 
    
    return answer;
}

public void LCM(int a, int b)
{
	int n = a;
    int m = b;
    while (m > 0) // while문을 돌며 GCD n을 구한다.
	{
    	int r = n % m;
    	n = m;
    	m = r;
	}
    return a * b / n; // 주어진 두 자연수 a * b를 GCD n으로 나눠 LCM을 구한다.
}

'프로그래머스' 카테고리의 다른 글

n개 간격의 원소들 (C#)  (0) 2024.05.20
괄호 회전하기 (C#)  (0) 2024.05.15
귤 고르기 (C#)  (0) 2024.05.09
멀리 뛰기 (C#)  (0) 2024.05.09
예상 대진표 (C#)  (0) 2024.05.09