프로그래머스 1단계) 최대공약수와 최소공배수
2021. 12. 3. 13:35ㆍAlgorithm/알고리즘
728x90
반응형
문제
제출답안
12:20 - 13:23
1차시도
func solution(_ n:Int, _ m:Int) -> [Int] {
var bigNum: Int
var smallNum: Int
var greatestCommonFactor: Int//최대공약수
var leastCommonMultiple: Int//최소공배수
if n > m {
bigNum = n
smallNum = m
} else {
bigNum = m
smallNum = n
}
if bigNum % smallNum == 0 {
leastCommonMultiple = bigNum
greatestCommonFactor = smallNum
} else {
leastCommonMultiple = bigNum * smallNum
greatestCommonFactor = 1
}
return [greatestCommonFactor, leastCommonMultiple]
}
참고해볼만한 답안
https://hururuek-chapchap.tistory.com/63
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)]
}
답안제출(통과)
import Foundation
func GCD(_ n:Int, _ m:Int) -> Int {
if m % n == 0 {
return n
}
return GCD(m % n, n)
}
func solution(_ n:Int, _ m:Int) -> [Int] {
return [GCD(n,m), (n*m)/GCD(n,m)]
}
유의미한 답안
Q8.최대공약수와 최소공배수
func GCD(_ n:Int, _ m:Int) -> Int {
if m%n == 0 {
return n
}
return GCD(m%n,n)
}
func solution(_ n:Int, _ m:Int) -> [Int] {
return [GCD(n,m),m*n/GCD(n,m)]
}
최대공약수는 재귀를 통해 값 a,b가 주어지면
b가 더 크다는 가정하에
b%a가 0이 될 때까지 GCD(b%a,a)을 수행
b%a가 0이 되었다면 a를 출력
최소공배수는 a*b / a와b의 최대공약수니까
그대로 값을 리턴.
다른 사람의 풀이
남이 더 괜찮게 짠 코드가 없어서 패스
참고참고
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)]
}
참고
느낀점
내가 놓치고 있는 테스트케이스를 잡아내려면 어떻게 해야할까에 대해 의문임..
하나하나 다 적어서 해보는데엔 한계가 있고..
->
재귀함수가 뭔지 알아보기
GCD
유클리드호제법 읽어보니까 알거같긴한데.. 그래도 한번더 봐야할 문제
728x90
반응형
'Algorithm > 알고리즘' 카테고리의 다른 글
프로그래머스 1단계) 정수 제곱근 판별 (0) | 2021.12.03 |
---|---|
프로그래머스 1단계) 제일 작은 수 제거하기 (0) | 2021.12.03 |
프로그래머스 1단계) 콜라츠추측 (0) | 2021.12.02 |
프로그래머스 1단계) 평균구하기 (0) | 2021.12.02 |
프로그래머스 1단계) 하샤드수 (0) | 2021.12.02 |