728x90

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

정답 코드
< 내 정답 코드 >
class Solution {
public int solution(int[] arr) {
int max = Math.max(arr[0], arr[1]);
int min = Math.min(arr[0], arr[1]);
int GCD = gcd(max, min);
int LCM = (arr[0] * arr[1]) / GCD;
for (int i = 2; i < arr.length; i++) {
LCM = (LCM * arr[i]) / gcd(Math.max(LCM, arr[i]), Math.min(LCM, arr[i]));
}
return LCM;
}
public static int gcd(int max, int min) {
if (max % min == 0) {
return min;
}
return gcd(min, max % min);
}
}
< 타인 답변 코드 >
class Solution {
public int solution(int[] arr) {
int answer = arr[0];
int gcd = 0;
for (int i = 1; i < arr.length; i++) {
gcd = gcd(answer, arr[i]);
answer = answer * arr[i] / gcd;
}
return answer;
}
public static int gcd(int a, int b) {
if (a > b) {
return (a % b == 0) ? b : gcd(b, a % b);
} else {
return (b % a == 0) ? a : gcd(a, b % a);
}
}
}
이것을 주의하자!
- '최대공약수(GCD)' 와 '최소공배수(LCM)' 관련된 문제다. '최소공배수(LCM)' 를 구하려면 먼저 '최대공약수(GCD)'를 얻어야 한다.
최대공약수(GCD) = '유클리드 호제법' : 큰 수를 작은 수로 나눠서 나머지가 0 이 될 때 나눈 수
최소공배수(LCM) = a * b / GCD
- 만약 여러 숫자가 있으면 차례대로 계산해야 한다. [ A , B , C , D , E ] 가 있다면 먼저 A 와 B 의 최소공배수(LCM)를 구하고, 이를 C 와의 최소공배수를 구한다. 그리고 나온 값을 D 와의 최소공배수를 구한다. 그리고 나온 값을 E 와의 최소공배수를 구하면 된다.
- 내 정답 코드는 좀 지저분하다. 반면 타인 답변 코드는 비교적 깔끔하다. 어짜피 앞에서 계산된 최소공배수가 다시 매개변수로 사용될 것이기에 하나로 통일했다.
'코딩 테스트' 카테고리의 다른 글
| [백준] (2442번) 별 찍기 - 5 (0) | 2022.11.19 |
|---|---|
| [프로그래머스] (Lv.1) 크레인 인형뽑기 게임 (0) | 2022.11.13 |
| [프로그래머스] (Lv.2) 멀리 뛰기 (0) | 2022.09.14 |
| [코드스쿼드] 숫자 야구게임 (0) | 2022.09.14 |
| [프로그래머스] (Lv.2) 구명보트 *** (0) | 2022.09.13 |