[Programmers] [Lv.1] [Swift] 최대공약수와 최소공배수

doyeonjeong_·2022년 7월 19일
0

프로그래머스

목록 보기
3/35

문제

최대공약수와 최소공배수

풀이


func getGCD(_ n:Int, _ m:Int) -> Int {
    var a = 0
    var b = max(n, m)
    var r = min(n, m)
    while r != 0 {
        a = b
        b = r
        r = a % b
    }
    return b
}

func solution(_ n:Int, _ m:Int) -> [Int] {
    let a = n, b = m
    let G:Int = getGCD(a, b) // 최대공약수
    let L:Int = a * b / G // 최소공배수
    
    return [G, L]
}

FEEDBACK

배운 점

  • 유클리드 호제법이 이해가 안돼서 40분 넘게 공부했다...
    *유클리드 호제법 : 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.

다른 풀이


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

앗.. 아앗...😭

개선할 점

  • 조금만 더 생각했으면 더 간단한 문장으로 구현할 수 있지 않았을까? 🤔
  • 함수를 더 쪼개서 변수를 쓰지 않고도 바로 처리 할 수 있는 걸 연습해야겠다.
profile
블로그 이사중 🚚 byukbyak.tistory.com

0개의 댓글