Swift | programmers/Lv1.

[Swift] Lv.1 최대공약수와 최소공배수 - 유클리드 호제법

iOSDEv 2024. 3. 12. 08:38
최대공약수와 최소공배수
유클리드 호제법

 

나의 풀이

 

func solution(_ n:Int, _ m:Int) -> [Int] {
    var numA = min(n, m)
    var numB = max(n, m)
    var value = 0
    for x in 1...numA {
        // numA와 numB가 x로 나누어떨어지면 (공약수를 찾으면)
        if numA % x == 0 && numB % x == 0 {
        // 현재의 x 값을 최대공약수로 업데이트
           value = x
        }
    }
     // 최소공배수는 두 수의 곱을 최대공약수로 나눈 값입니다.
     // [최대공약수, 최소공배수]를 반환
    return [value, value * (numA / value) * (numB / value)]
}
다른 사람 풀이
func solution(_ n:Int, _ m:Int) -> [Int] {
    var first: [Int] = []
    for index in 1...n {
        if n % index == 0  && m % index == 0 {
            first.append(index)
        }
    }
    // 배열에서 가장 마지막 값이 최대공약수
    let maxValue: Int = first[first.count-1]
    
    return [maxValue ,(n * m)/maxValue ]
}

 

func solution(_ n:Int, _ m:Int) -> [Int] {
    // 최대공약수를 계산하는 함수 gcd를 호출하여 g에 저장
    let g = gcd(n,m)
    // [최대공약수, 최소공배수]를 반환
    return [g, g * (n/g) * (m/g)]
}

func gcd(_ n:Int,_ m: Int)->Int {
    // 재귀적으로 최대공약수를 계산하는 함수
    return n%m == 0 ? m : gcd(m, n%m)
}

 

 

//유클리드 호제법

func solution(_ n:Int, _ m:Int) -> [Int] {
    var (a, b) = (n, m)
    // b가 0이 될 때까지 반복
    while b != 0 {
    // a를 b로 나눈 나머지를 구해서 temp에 저장
        let temp = a % b
        // a를 b로, b를 temp로 갱신
        a = b
        b = temp
    }
    return [a, n * m / a]
}

 

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr