Coding Test/Codility

12. μ΅œλŒ€κ³΅μ•½μˆ˜ (Greatest Common Divisor, GCD) Codility Lesson ν•œκ΅­μ–΄ 정리본 (JavaScript ver.)

chamroro 2025. 3. 2. 16:20

μ΅œλŒ€κ³΅μ•½μˆ˜(GCD)λž€?

두 개의 μ •μˆ˜ a, b의 μ΅œλŒ€κ³΅μ•½μˆ˜(GCD)λŠ” 두 수λ₯Ό λ™μ‹œμ— λ‚˜λˆŒ 수 μžˆλŠ” κ°€μž₯ 큰 μ •μˆ˜ λ₯Ό μ˜λ―Έν•œλ‹€.


1. O(n) μ‹œκ°„ λ³΅μž‘λ„μ˜ μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜ (λΊ„μ…ˆ 방식)

JavaScript μ½”λ“œ:

function gcdSubtraction(a, b) {
    if (a === b) return a;
    return a > b ? gcdSubtraction(a - b, b) : gcdSubtraction(a, b - a);
}

2. O(log n) μ‹œκ°„ λ³΅μž‘λ„μ˜ μœ ν΄λ¦¬λ“œ μ•Œκ³ λ¦¬μ¦˜ (λ‚˜λ¨Έμ§€ 방식)

JavaScript μ½”λ“œ:

function gcd(a, b) {
    return a % b === 0 ? b : gcd(b, a % b);
}

이 방법은 λΉ λ₯΄κ³ , λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 기본적으둜 μ œκ³΅λœλ‹€.


3. μ΅œμ†Œκ³΅λ°°μˆ˜(LCM) 계산

μ΅œμ†Œκ³΅λ°°μˆ˜(LCM)λŠ” 두 수 a, b의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” 방법이닀.

function lcm(a, b) {
    return (a * b) / gcd(a, b);
}

이 ν•¨μˆ˜λŠ” O(log n) μ‹œκ°„ λ³΅μž‘λ„λ‘œ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό 계산할 수 μžˆλ‹€.


λ°˜μ‘ν˜•