(Swift) 프로그래머 N 최소 공배수(레벨 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12953
2. 액세스
두 개의 인수가 아닌 배열로 주어진 최소 공배수를 계산합니다.
루프를 사용하여 최소 공배수를 찾는 논리를 구현할 수 있습니다.
최소 공배수를 찾으려면 최대 공약수를 찾아야 합니다.
두 수의 최소공배수는 두 숫자의 곱 / 최대 공약수 로 찾을 수 있기 때문에
다음은 lcm 및 gcd라는 함수를 사용하여 최소 공배수 및 최대 공약수를 찾는 논리입니다.
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
}
}
}