코테 준비를 하다보면 두 수의 최대 공약수를 구해야 하는 경우가 보인다.
a = 100, b = 30 두수가 있을 때,
a = b * x + y 에서
기존 b 에 a 를 넣고 b 자리에는 y를 넣어 반복 하고
y가 0일 때의 b값이 최대 공약수가 된다
100 = 30 * 3 + 10 => a 에 30 b 에 나머지 10치환
30 = 10 * 3 + 0 => 나머지 0 이므로 10이 최대공약수 가 된다.
코드화하면
const GCD = (a, b) => {
if (b === 0) return a;
return GCD(b, a % b);
};
위 처럼 재귀함수화 하여 파라미터의 a 자리에 b를 대입하고, b 자리에는 나머지를 넣어주면 된다.
그럼 최소공배수를 구하는 법은?
두 수 a와 b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수를 나눈 것과 같다.
function lcm(a, b) {
return (a * b) / GCD(a, b)
}
const GCD = (a, b) => {
if (b === 0) return a;
return GCD(b, a % b);
};
'JavaScript > Algorithm' 카테고리의 다른 글
[Algorithm] 알고리즘 기본 패턴 1 - Frequency Counter (빈도수 세기) (0) | 2024.10.31 |
---|---|
알고리즘 출제빈도순 수정중입니다 (0) | 2024.10.17 |
[Algorithm] 알고리즘의 공간 복잡도(Space Complexity)란? (0) | 2024.10.11 |
[프로그래머스] Lv1) 소수 찾기 ( 에라토스테네스의 체, 소수 찾기 ) (0) | 2024.09.23 |
[프로그래머스] Lv1) 기사단원의 무기 ( 에라토스테네스의 체, 소수 , 약수 찾기 ) (0) | 2024.09.20 |