728x90
[Swift] 프로그래머스 N개의 최소공배수(lv. 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12953
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
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 예상 대진표(lv. 2) (0) | 2023.03.13 |
---|---|
[Swift] 프로그래머스 영어 끝말잇기(lv. 2) (1) | 2023.03.11 |
[Swift] 프로그래머스 카펫(lv. 2) (0) | 2023.03.09 |
[Swift] 프로그래머스 짝지어 제거하기(lv. 2) (0) | 2023.03.07 |
[Swift] 프로그래머스 다음 큰 숫자(lv. 2) (0) | 2023.03.06 |
댓글