HIT해

[프로그래머스 LV0] 분수의 덧셈 본문

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]
}

 

함수를 사용할때 매개변수 명을 적어주여야한다.