본문 바로가기
Problem Solving

[Swift] 프로그래머스 N개의 최소공배수(lv. 2)

by DuncanKim 2023. 3. 10.
728x90

[Swift] 프로그래머스 N개의 최소공배수(lv. 2)

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12953

 

프로그래머스

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

programmers.co.kr

 

2. 접근

최소공배수를 구하는데, 인자가 두 개가 주어지지 않고 배열로 주어진다. 반복문으로 최소공배수를 찾아주는 로직을 구현해주면 된다.

최소공배수를 찾기 위해서는 최대공약수를 찾아주어야 한다. 두 수의 최소공배수는 두 수의 곱 / 최대공약수 로 찾을 수 있기 때문이다.

 

아래에서는 lcm, gcd라는 함수로 최소공배수와 최대공약수를 찾아주는 로직을 구하였다.

solution 에서는 arr을 순회하며 tempLcm에 현재까지 구해진 최소공배수를 저장하고, 그 뒤에 등장하는 수와 계속비교하여 최소공배수를 계산하는 로직을 구현하였다.

 

 

3. 코드

func solution(_ arr:[Int]) -> Int {
    var tempLcm = 0
    for i in 0 ... arr.count - 1 {
        if i == 0 {
            tempLcm = lcm(arr[i], arr[i + 1])
        } else {
            tempLcm = lcm(arr[i], tempLcm)
        }
    }
    return tempLcm
}

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

func gcd(_ num1: Int, _ num2: Int) -> Int {
    var divisor = 0
    if num1 > num2 {
        divisor = num1 % num2
        if divisor != 0 {
            return gcd(num2, divisor)
        } else {
            return num2
        }
    } else if num1 == num2 {
        return num1
    } else {
        divisor = num2 % num1
        if divisor != 0 {
            return gcd(num1, divisor)
        } else {
            return num1
        }
    }
}
728x90

댓글