프로그래머스 1단계) 최대공약수와 최소공배수

2021. 12. 3. 13:35Algorithm/알고리즘

728x90
반응형

문제

제출답안

12:20 - 13:23

1차시도

func solution(_ n:Int, _ m:Int) -> [Int] {
    
    var bigNum: Int
    var smallNum: Int
    var greatestCommonFactor: Int//최대공약수
    var leastCommonMultiple: Int//최소공배수
    
    if n > m {
        bigNum = n
        smallNum = m
    } else {
        bigNum = m
        smallNum = n
    }
    
    if bigNum % smallNum == 0 {
       leastCommonMultiple = bigNum
        greatestCommonFactor = smallNum
    } else {
        leastCommonMultiple = bigNum * smallNum
        greatestCommonFactor = 1
    }
    
    return [greatestCommonFactor, leastCommonMultiple]
}

참고해볼만한 답안

https://hururuek-chapchap.tistory.com/63

 

Swift) 프로그래머스(Lv1) 최대공약수와 최대공배수 (유클리드 호제법)

programmers.co.kr/learn/courses/30/lessons/12940 코딩테스트 연습 - 최대공약수와 최소공배수 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에

hururuek-chapchap.tistory.com

func gcd(_ a: Int, _ b: Int) -> Int {
    let mod: Int = a % b
    return 0 == mod ? min(a, b) : gcd(b, mod)
}

func lcm(_ a: Int, _ b: Int) -> Int {
    return a * b / gcd(a, b)
}

func solution(_ n:Int, _ m:Int) -> [Int] {
    return [gcd(n, m), lcm(n, m)]
}

답안제출(통과)

import Foundation

func GCD(_ n:Int, _ m:Int) -> Int {
    if m % n == 0 {
        return n
    }
    return GCD(m % n, n)
}

func solution(_ n:Int, _ m:Int) -> [Int] {
    return [GCD(n,m), (n*m)/GCD(n,m)]
}

유의미한 답안

Q8.최대공약수와 최소공배수
func GCD(_ n:Int, _ m:Int) -> Int {
    if m%n == 0 {
        return n
    }
    return GCD(m%n,n)
}

func solution(_ n:Int, _ m:Int) -> [Int] {
    return [GCD(n,m),m*n/GCD(n,m)]
}

최대공약수는 재귀를 통해 값 a,b가 주어지면
b가 더 크다는 가정하에 
b%a가 0이 될 때까지 GCD(b%a,a)을 수행
b%a가 0이 되었다면 a를 출력

최소공배수는 a*b / a와b의 최대공약수니까
그대로 값을 리턴.

다른 사람의 풀이
남이 더 괜찮게 짠 코드가 없어서 패스

참고참고

func gcd(_ a: Int, _ b: Int) -> Int {
    let mod: Int = a % b
    return 0 == mod ? min(a, b) : gcd(b, mod)
}

func lcm(_ a: Int, _ b: Int) -> Int {
    return a * b / gcd(a, b)
}

func solution(_ n: Int, _ m: Int) -> [Int] {
    return [gcd(n, m), lcm(n, m)]
}



참고

 

유클리드 호제법 - 위키백과, 우리 모두의 백과사전

유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를

ko.wikipedia.org

 

느낀점

내가 놓치고 있는 테스트케이스를 잡아내려면 어떻게 해야할까에 대해 의문임..

하나하나 다 적어서 해보는데엔 한계가 있고..

->

 

재귀함수가 뭔지 알아보기

GCD

유클리드호제법 읽어보니까 알거같긴한데.. 그래도 한번더 봐야할 문제

728x90
반응형