알고리즘 문제 연습
[프로그래머스]N개의 최소 공배수
codi-3
2024. 10. 13. 22:28
🔍 문제
📊 분석
- 두 수 a와 b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수를 나눈 것과 같다는 성질을 가지고 있다.
- 두수의 최소공배수와 최대공배수는 유클리드 호제법을 이용하여 구할수있다.
- 배열의 원소들을 위성질을 이용하여 loop을 하면 최소공배수를 구할수있다.
✏️ 풀이
class Solution {
public int solution(int[] arr) {
int answer = 0;
if(arr.length == 1) return arr[0];
int tmp = gcd(arr[0],arr[1]); // 첫 2개 원소의 최대공약수
answer = (arr[0]*arr[1]) /tmp;// 첫 2개 원소의 최소공배수
/*
원소의 개수가 3개 이상인 경우
앞의 두 원소의 최소 공배수와 다음 원소의 최소 공배수를 구하며
배열의 끝까지 반복
*/
if(arr.length >2){
for(int i = 2; i < arr.length; i++){
tmp = gcd(answer, arr[i]);
answer = (answer * arr[i]) / tmp;
}
}
return answer;
}
public static int gcd(int a, int b){
int r = a % b;
if(r == 0) return b;
else return gcd(b, r);
}
}