Swift | programmers/Lv1.
[Swift] Lv.1 최대공약수와 최소공배수 - 유클리드 호제법
iOSDEv
2024. 3. 12. 08:38
최대공약수와 최소공배수
유클리드 호제법

나의 풀이
func solution(_ n:Int, _ m:Int) -> [Int] {
var numA = min(n, m)
var numB = max(n, m)
var value = 0
for x in 1...numA {
// numA와 numB가 x로 나누어떨어지면 (공약수를 찾으면)
if numA % x == 0 && numB % x == 0 {
// 현재의 x 값을 최대공약수로 업데이트
value = x
}
}
// 최소공배수는 두 수의 곱을 최대공약수로 나눈 값입니다.
// [최대공약수, 최소공배수]를 반환
return [value, value * (numA / value) * (numB / value)]
}
다른 사람 풀이
func solution(_ n:Int, _ m:Int) -> [Int] {
var first: [Int] = []
for index in 1...n {
if n % index == 0 && m % index == 0 {
first.append(index)
}
}
// 배열에서 가장 마지막 값이 최대공약수
let maxValue: Int = first[first.count-1]
return [maxValue ,(n * m)/maxValue ]
}
func solution(_ n:Int, _ m:Int) -> [Int] {
// 최대공약수를 계산하는 함수 gcd를 호출하여 g에 저장
let g = gcd(n,m)
// [최대공약수, 최소공배수]를 반환
return [g, g * (n/g) * (m/g)]
}
func gcd(_ n:Int,_ m: Int)->Int {
// 재귀적으로 최대공약수를 계산하는 함수
return n%m == 0 ? m : gcd(m, n%m)
}
//유클리드 호제법
func solution(_ n:Int, _ m:Int) -> [Int] {
var (a, b) = (n, m)
// b가 0이 될 때까지 반복
while b != 0 {
// a를 b로 나눈 나머지를 구해서 temp에 저장
let temp = a % b
// a를 b로, b를 temp로 갱신
a = b
b = temp
}
return [a, n * m / a]
}

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