# Algorithm/--- 프로그래머스

[프로그래머스] N개의 최소공배수

jiniz.ll 2022. 1. 26. 00:26

문제

  • 100 이하의 n 개의 자연수가 주어질 때
  • n 개의 수에 대한 최소공배수 구하기

예. [2,6,8,14] -> 4개의 수에 대한 최소 공배수

Idea

  • 최소공배수 구하고 나온 최소공배수와 다음 수의 최소공배수 구하는 방식으로
  • 반복적으로 구하기

Code

Swift

  • 고차함수 활용: reduce
func lcm(_ a: Int, _ b: Int) -> Int {

    return (a * b) / gcd(a, b)
}

func gcd(_ a: Int, _ b: Int) -> Int {

    var num = [a, b].max()!
    var divisor = [a, b].min()!

    while num % divisor != 0 {

        let remainder = num % divisor

        num = divisor
        divisor = remainder
    }
    return divisor
}

func solution(_ arr: [Int]) -> Int {

    return arr.reduce(arr[0]) { lcm($0, $1) }
}

 

  • 처음 풀이
func lcm(_ a: Int, _ b: Int) -> Int {
    
    return (a * b) / gcd(a, b)
}

func gcd(_ a: Int, _ b: Int) -> Int {
    
    var num = [a, b].max()!
    var divisor = [a, b].min()!
    
    while num % divisor != 0 {
        
        let remainder = num % divisor
        
        num = divisor
        divisor = remainder
    }
    return divisor
}

func solution(_ arr: [Int]) -> Int {
    
    if arr.count == 1 { return arr[0] }
    var a = arr[0]
    for b in arr[1...] {
        a = lcm(a, b)
    }
    
    return a
}