알고리즘 문제/Programmers
[프로그래머스] N개의 최소공배수 - Java
Praetoriani
2021. 9. 11. 14:36
문제 : 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);
}
}