Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- swift
- MainScheduler
- 코테
- MainScheduler.asyncInstance
- gitflow
- SwiftUI
- MethodSwilzzling
- RaceCondition
- rxswift
- SRP
- 등굣길
- leetcode
- GIT
- data_structure
- 명품cppProgramming c++
- IOS
- DynamicMemberLookup
- 프로그래머스
- 오픈채팅방
- DependencyInjection
- MainScheduler.Instance
- 청년취업사관학교
- cleanarchitecture
- DispatchQueue
- Realm
- CoreBluetooth
- DiffableDataSource
- combine
- GCD
- SeSAC
Archives
- Today
- Total
Do.
최대공약수와 최소공배수 본문
코테 단골 손님 이기도 한 최대공약수와 최소공배수 구하는 법
최대공약수는 유클리드 호제법을 통해서 구하는게 코딩이 훨씬 쉬운 것 같다.
최대공약수
유클리드 호제법을 통한 최대공약수 구하는 법은 간단한데
https://ko.wikipedia.org/wiki/%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98
n1과 n2의 최대공약수를 유클리드 호제법을 통해 구한다고 가정
n1은 192, n2는 72일 때
1. 192를 72로 나눈 나머지를 구한다.
2. 72를 1에서 나온 나머지로 나누어 나온 나머지를 구한다.
3. 1에서 나온 나머지를 2에서 나온 나머지로 나눈 나머지를 구한다.
4. 위 과정을 나머지가 0이 나올때 까지 반복하고 0이 나왔을 때 나누었던 값이 최대공약수가 된다.
이를 코드로 보면
1.n1을 n2로 나눈 나머지를 구한다.
2.n2를 이제 다시 n1으로 보고 나머지를 n2로 본다. 를 반복하는 것이기 때문에
func getGcd(_ n1: Int, _ n2: Int) -> Int { let remainder = n1 % n2 return remainder == 0 ? n2 : getGcd(n2, remainder) }
이런 심플한 재귀함수로 구현할 수 있다.
최소공배수
최소공배수는 최대공약수를 구하면 정말 간단하게 구할 수 있는데
최소공배수는 원래 각 수의 소인수 분해를 통해 각각 지수가 가장 큰 수를 곱하면 되는데
각 수의 소인수 분해를 하는 것보다 유클리드 호제법을 통해 최대공약수를 구하는게 빠르다.
구글에 최소공배수라고 검색하면 나오는 위키 썸네일?로
n1 * n2 를 n1, n2의 최대공약수로 나누면 나온다고 되어있다.
따라서 코드로 보자면
let lcm = n1 * n2 / gcd(n1, n2)
끝.
'Algorithm' 카테고리의 다른 글
2019 KAKAO BLIND RECRUITMENT - 오픈 채팅방, Swift (0) | 2022.03.13 |
---|---|
2020 KAKAO BLIND RECRUITMET - 문자열 압축, Swift (0) | 2022.03.12 |
Ring Buffer를 이용한 Queue 자료구조 구현, Swift (0) | 2022.02.09 |
Swift - Stack 구현하기 (0) | 2022.02.09 |
LeetCode - Binary Tree Level Order Traversal (0) | 2022.02.09 |
Comments