Programmers/LV1.

Lv1 | Swift -최대공약수와 최소공배수

ziziDev 2024. 7. 10. 09:44
반응형

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한 사항
  • 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예nmreturn
3 12 [3, 12]
2 5 [1, 10]
입출력 예 설명

입출력 예 #1
위의 설명과 같습니다.

입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

 

나의 문제 풀이

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)]
}

 

 

다른 사람의 문제 풀이

unc 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 > LV1.' 카테고리의 다른 글

Lv1 | Swift - 3진법 뒤집기  (0) 2024.07.15
Lv1 | Swift - 예산  (0) 2024.07.12
Lv1 | Swift - 행렬의 덧셈  (0) 2024.07.04
Lv1 | Swift - 문자열 다루기 기본  (0) 2024.07.03
Lv1 | Swift - 부족한 금액 계산하기  (0) 2024.07.02