일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스위프트
- xml
- 알고리즘
- flutter #state # stateful #stateless
- GIT
- collectionView
- 프로젝트회고
- IOS
- 백준
- CS193p
- colorofdays
- SwiftUI
- process
- flutter
- Masil
- 오늘의 색상
- 스터디
- WidgetTree
- xcode
- 프로그래머스
- ImageSlider
- MVVM
- UserDefault
- 조건문
- 코딩테스트
- UIKit
- 청년취업사관학교후기
- 새싹후기
- stanford
- Swift
Archives
- Today
- Total
개발을 시작하는 이야기
[프로그래머스] 최대공약수와 최소공배수 본문
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 조건
- 두 수는 1이상 1000000이하의 자연수입니다.
예시
n m return 3 12 [3, 12] 2 5 [1, 10]
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
Solution.Swift
func solution(_ n:Int, _ m:Int) -> [Int] {
var minNum = min(n, m)
var maxNum = max(n, m)
var divisor = 2
var gcd = 1
while divisor <= minNum {
if minNum % divisor == 0 && maxNum % divisor == 0 {
minNum = minNum / divisor
maxNum = maxNum / divisor
gcd *= divisor
divisor = 1
}
divisor += 1
}
return [gcd, gcd * minNum * maxNum]
}
- 입력받은 수를 큰수와 작은수로 구분한다.
- while과 if 문을 활용하여 입력받은 두 수를 같은 값으로 나눠서 나머지가 0이 되는 값을 찾는다.
- 작업이 더이상 나누어지지 않을 때까지 반복한다.
- 최대 공약수와 최소 공배수를 계산해서 반환한다.
다른사람의 문제풀이
func gcd(_ a: Int, _ b: Int) -> Int {
let mod: Int = a % b
return 0 == mod ? min(a, b) : gcd(b, mod)
}
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}
func solution(_ n:Int, _ m:Int) -> [Int] {
return [gcd(n, m), lcm(n, m)]
}
'개발 이야기 > Algorithm Study' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 (0) | 2022.04.27 |
---|---|
[프로그래머스] 문자열 압축 (0) | 2022.04.26 |
콜라스 추측 (0) | 2022.04.24 |
[프로그래머스] 평균 구하기 (0) | 2022.04.23 |
[프로그래머스] 하샤드 수 (0) | 2022.04.22 |