programmers

[Programmers Level 0] 분수의 덧셈 Javascript

냠냠맨 2022. 12. 13. 15:02

⚡문제정보

 

분수의 덧셈 문제입니다.

수학에 약하다보니 통분을 해야한다는건 알겠는데.. 코딩을 어케해야하지.. 하면서

분수에 대해 찾아보다보니

가장 쉽게 통분을 하는 방법은 분모와 분모를 서로 곱해주는것이었습니다

서로를 곱해주면.. 같은 값이 될 수 밖에 없겠죠 크으 역시 사람들 똑똑하다

 

통분 해준 다음 기약분수로 만들어야하는데

기약분수로 만들어주려면 분자와 분모의 최소공배수로 나눠주면 해결

 


 

🙄제한사항

 

0 <denum1, num1, denum2, num2 < 1,000

 

 


 

 

🔍접근방법

 

분수끼리의 덧셈을 위해 통분을 해줘야한다.

기약분수로 만들어주기 위해 덧셈한 뒤 분자,분모의 최소공배수를 파악해야한다.

 


 

 

🔍나의 풀이

 

function solution(denum1, num1, denum2, num2) {
    let wholemeal = [denum1*num2 + denum2*num1,num1*num2]
    const gcd = (a, b) => {  
    if (b === 0) return a   
        return gcd(b, a % b)  
    }
    let least = gcd(wholemeal[0],wholemeal[1])
    let answer = [wholemeal[0] / least , wholemeal[1]/least]
    
    return answer
}

 

 

코드 설명은 후술하겠습니다.

사실 wholemeal 변수는 필요없을 것 같은데 직관적으로 보기 위해

변수로 선언해줬어요

 

 

function solution(denum1, num1, denum2, num2) {
    let wholemeal = [denum1*num2 + denum2*num1,num1*num2]
    //통분을 해줍니다. 분모는 통일되니까 한번만 계산하고 분자들은 각각 곱해서 더해줍니다.
    const gcd = (a, b) => {  
    if (b === 0) return a   
        return gcd(b, a % b)  
    }
    //최소공배수를 구하는 함수입니다.
    
    let least = gcd(wholemeal[0],wholemeal[1])
    //같은 값을 구하기 위한 재귀호출이 일어나지 않도록 변수에 값을 저장해줬습니다.
    let answer = [wholemeal[0] / least , wholemeal[1]/least]
    // 분자,분모를 각각 최소공배수로 나눠주어 기약분수로 만들었습니다.
    return answer
    // 정답 반환
}

 

반응형