개발을 시작하는 이야기

[프로그래머스] 최대공약수와 최소공배수 본문

개발 이야기/Algorithm Study

[프로그래머스] 최대공약수와 최소공배수

Teiresias 2022. 4. 25. 21:10

문제 설명

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

제한 조건

  • 두 수는 1이상 1000000이하의 자연수입니다.

예시

n m return
3 12 [3, 12]
2 5 [1, 10]

입출력 예 설명

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

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

Solution.Swift

func solution(_ n:Int, _ m:Int) -> [Int] {
    var minNum = min(n, m)
    var maxNum = max(n, m)
    var divisor = 2
    var gcd = 1

    while divisor <= minNum {
        if minNum % divisor == 0 && maxNum % divisor == 0 {
            minNum = minNum / divisor
            maxNum = maxNum / divisor
            gcd *= divisor
            divisor = 1
        }
        divisor += 1
    }
    return [gcd, gcd * minNum * maxNum]
}
  1. 입력받은 수를 큰수와 작은수로 구분한다.
  2. while과 if 문을 활용하여 입력받은 두 수를 같은 값으로 나눠서 나머지가 0이 되는 값을 찾는다.
  3. 작업이 더이상 나누어지지 않을 때까지 반복한다.
  4. 최대 공약수와 최소 공배수를 계산해서 반환한다.

다른사람의 문제풀이

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

 

[프로그래머스 테스트]

 

'개발 이야기 > Algorithm Study' 카테고리의 다른 글

[프로그래머스] 오픈채팅방  (0) 2022.04.27
[프로그래머스] 문자열 압축  (0) 2022.04.26
콜라스 추측  (0) 2022.04.24
[프로그래머스] 평균 구하기  (0) 2022.04.23
[프로그래머스] 하샤드 수  (0) 2022.04.22