유클리드 알고리즘이란 두 수의 최대 공약수(GCD)를 구하는 알고리즘입니다.
이 알고리즘의 핵심은 다음 성질에 기반합니다.
"두 수 ()가 있을 때, 와 의 최대공약수는 와 를 로 나눈 나머지()의 최대공약수와 같다."
GCD(a, b) = GCD(b, a % b)
1단계: 1071을 462로 나눕니다.
2단계: 이전의 나누는 수(462)를 나머지(147)로 나눕니다.
3단계: 이전의 나누는 수(147)를 나머지(21)로 나눕니다.
나머지가 0이 되었으므로, 마지막 나누는 수인 21이 최대공약수입니다.
def gcd(a, b):
while b != 0: # b가 0이 될 때까지 (나머지가 없을 때까지) 반복합니다.
a, b = b, a % b # (중요!) a에는 b를 넣고, b에는 'a를 b로 나눈 나머지'를 넣습니다.
return a # b가 0이 되면, 그때의 a가 최대공약수입니다.
function gcd(a, b) {
if (b === 0) {
return a;
}
return gcd(b, a % b);
}
// 사용 예시
console.log(gcd(1071, 462)); // 출력: 21
const gcd = (a, b) => {
while (b !== 0) {
[a, b] = [b, a % b]; // 구조 분해 할당 적용
}
return a;
};

function fnGCD(a, b) {
return a % b ? fnGCD(b, a % b) : b
}
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
let denom = denom1*denom2;
let numer = numer1*denom2 + numer2*denom1;
let GCD = fnGCD(numer, denom);
denom = denom/GCD;
numer = numer/GCD;
answer = [numer, denom];
return answer;
}