Swift/Swift 알고리즘
[프로그래머스 LV0] 분수의 덧셈
힛해
2024. 7. 9. 17:52
728x90
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
numer1 denom1 numer2 denom2 result
1 | 2 | 3 | 4 | [5, 4] |
9 | 2 | 1 | 3 | [29, 6] |
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
기약분수를 만들려면 분자와 분모의 최대공약수(Greatest Common Divisor)를 구해낸 다음 나눈값을 분수로 표현하면 된다!
이때 유클리드 호제법을 사용해서 해결하면 된다.
재귀처리
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}
최소공배수(Least Common Multiple, Lowest Common Multiple)는 아래와 같은 방법으로 구할 수 있다
lcm = a*b / gcd(a,b);
결과 코드
import Foundation
func gcd(_ num1 : Int, _ num2 : Int) -> Int {
if(num2 == 0){
return num1
}else{
return gcd(num2, num1 % num2)
}
}
func solution(_ numer1:Int, _ denom1:Int, _ numer2:Int, _ denom2:Int) -> [Int] {
var numer3 : Int
var denom3 : Int
if(denom1 != denom2){
numer3 = numer1 * denom2 + numer2 * denom1
denom3 = denom1 * denom2
}else{
numer3 = numer1 + numer2
denom3 = denom1
}
let gcdd = gcd(numer3, denom3)
numer3 = numer3 / gcdd
denom3 = denom3 / gcdd
return [numer3, denom3]
}
이때 _ 를 사용하지 않았을때 코드를 작성하는 방식에 차이가 생긴다.
func gcd(num1 : Int, num2 : Int) -> Int {
if(num2 == 0){
return num1
}else{
return gcd(num1: num2, num2: num1 % num2)
}
}
func solution(_ numer1:Int, _ denom1:Int, _ numer2:Int, _ denom2:Int) -> [Int] {
var numer3 : Int
var denom3 : Int
if(denom1 != denom2){
numer3 = numer1 * denom2 + numer2 * denom1
denom3 = denom1 * denom2
}else{
numer3 = numer1 + numer2
denom3 = denom1
}
let gcdd = gcd(num1: numer3, num2: denom3)
numer3 = numer3 / gcdd
denom3 = denom3 / gcdd
return [numer3, denom3]
}
함수를 사용할때 매개변수 명을 적어주여야한다.