[Swift 코테 기초] 제곱근으로 약수 구하기
2023. 4. 3. 17:30ㆍSwift 코딩테스트/Swift 코테 기초
728x90
1. 약수 구하기
- N을 1부터 N까지의 수로 나눠서 그 값이 0이 되면 나눈 수는 N의 약수이다. 하지만 이 방법은 매우 비효율적이다.
- N의 약수는 N의 제곱근보다 클 수 없기 때문에 범위를 N/2로 한다.
- 주어진 수의 제곱근을 넘어선 약수는 이미 이전에 발견한 약수와 곱하여 나타낼 수 있기 때문
- 범위가 N/2이기 때문에 리턴 배열에 N이 포함되지 않으므로 추가해준다.
ex) 36의 경우 6까지만 탐색한다. 6 이상의 숫자는 이미 이전에 발견한 약수와의 곱으로 표현할 수 있다. (12 * 3, 3 * 12)
func solution(_ n: Int) -> [Int]{
return Array(1...n/2).filter { n % $0 == 0 } + [n]
}
print(solution(10)) //[1, 2, 5, 10]
2. 최소공배수 구하기 - 유클리드 호제법
//최대공약수 greatest common divisor
//a > b
func gcd(_ a: Int, _ b: Int) -> Int {
if b == 0 { return a }
else { return gcd(b, a % b) }
}
//축약
func gcd(_ a: Int, _ b: Int) -> Int {
return b == 0 ? a: gcd(b, a % b)
}
3. 최대공약수 구하기 - ab = 최대공약수 * 최소공배수
//최소공배수 - least common multiple
//ab = 최소공배수 * 최대공배수 => 최소공배수 = ab / 최대공배수
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}
728x90
'Swift 코딩테스트 > Swift 코테 기초' 카테고리의 다른 글
[Swift 코테 기초] -1을 입력받을 때까지 while let 사용하기 (0) | 2023.04.03 |
---|---|
[Swift 코테 기초] reverse()와 reversed(), ReversedCollection<Array<Element>> 사용 방법 (0) | 2023.02.22 |
[Swift 코테 기초] 배열 초기화 하기, [1, 2, 3, 4, ..., n] 증가하는 배열 초기화하기 (0) | 2023.02.22 |
[Swift 코테 기초] 2차원 배열에서 최소, 최대 찾기 (0) | 2023.02.16 |
[Swift 코테 기초] 고차함수를 이용해서 값을 더하고 정렬하기 (0) | 2023.02.08 |