Algorithm

[Algorithm] μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜ (μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•)

_보름 2021. 4. 5. 23:10

πŸ–₯ 문제

두 수λ₯Ό μž…λ ₯λ°›μ•„ 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ λ³΄μ„Έμš”.
λ°°μ—΄μ˜ 맨 μ•žμ— μ΅œλŒ€κ³΅μ•½μˆ˜, κ·Έλ‹€μŒ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ„£μ–΄ λ°˜ν™˜ν•˜λ©΄ λ©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ 두 수 3, 12의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 3, μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 12μ΄λ―€λ‘œ solution(3, 12)λŠ” [3, 12]λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ€” 풀이 방법

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μœΌλ‘œ μ΅œλŒ€κ³΅μ•½μˆ˜ κ΅¬ν•˜κΈ°

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ€ 2개의 μžμ—°μˆ˜μ˜ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
2개의 μžμ—°μˆ˜ n, m에 λŒ€ν•΄μ„œ nλ₯Ό m둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό r이라 ν•˜λ©΄, nκ³Ό m의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” mκ³Ό r의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ κ°™λ‹€.
이λ₯Ό μ΄μš©ν•˜μ—¬ m을 r둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ r'λ₯Ό κ΅¬ν•˜κ³ , λ‹€μ‹œ r을 r'둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό κ΅¬ν•˜λŠ” 과정을 λ°˜λ³΅ν•˜μ—¬ λ‚˜λ¨Έμ§€κ°€ 0이 λ˜μ—ˆμ„ λ•Œ λ‚˜λˆ„λŠ” μˆ˜κ°€ nκ³Ό m의 μ΅œλŒ€κ³΅μ•½μˆ˜μ΄λ‹€.

  • 1071κ³Ό 1029의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λ©΄,
    1. 1071 % 1029 = 42
    2. 1029 % 42 = 21
    3. 42 % 21 = 0
      λ”°λΌμ„œ, μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 21
  • 78696κ³Ό 19332의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λ©΄,
    1. 78696 % 19332 = 1368
    2. 19332 % 1368 = 180
    3. 1368 % 180 = 72
    4. 180 % 72 = 36
    5. 72 % 36 = 0
      λ”°λΌμ„œ, μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 36

μ΅œμ†Œκ³΅λ°°μˆ˜ κ΅¬ν•˜κΈ°

nκ³Ό m의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” nκ³Ό m을 κ³±ν•œ 수λ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜λ‘œ λ‚˜λˆ„λ©΄ ꡬ할 수 μžˆλ‹€.
μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ΅œμ†Œκ³΅λ°°μˆ˜ = n * m / μ΅œλŒ€κ³΅μ•½μˆ˜ 이닀.

πŸ‘©πŸ»‍πŸ’» Swift Code

func solution(_ n:Int, _ m:Int) -> [Int] {
    var gcd = 0
    var lcm = 0    
    var num1 = max(n, m)
    var num2 = min(n, m)
    var r = num1 % num2

    while num1 % num2 != 0 {
        r = num1 % num2
        num1 = num2
        num2 = r
    }

    gcd = num2
    lcm = n * m / gcd

    return [gcd, lcm]
}

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜

두 수λ₯Ό μž…λ ₯λ°›μ•„ 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ λ³΄μ„Έμš”. λ°°μ—΄μ˜ 맨 μ•žμ— μ΅œλŒ€κ³΅μ•½μˆ˜, κ·Έλ‹€μŒ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ„£μ–΄ λ°˜ν™˜ν•˜λ©΄ λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 두 수 3, 12의

programmers.co.kr