[프로그래머스] 분수의 덧셈(level0, JavaScript)

이민영·2023년 8월 24일

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120808

나의 접근 방식

  1. 각 분수의 분모가 동일하지 않으니 통분을 통해 크기가 같은 분수를 만들어준다.
  2. 유클리드 호제법으로 분자와 분모의 최대공약수를 구해준다.
  3. 분자와 분모에 최대공약수로 나눠준다.

문제풀이

function solution(numer1, denom1, numer2, denom2) {
    //분자
    const numerator = numer1*denom2 + numer2*denom1
    //분모
    const denominator = denom1*denom2
    //최대공약수 구해주는 함수 
    function gcd(num1, num2){
      	//유클리드 호제법
        //재귀를 통해 나머지값이 0이 될때까지 계속 나눠준다. 
      	// 예를 들면 1번 케이스 10, 8 일 경우 
        // 10 % 8 = 2     => 나머지가 0이 아니므로 제수(나누는 수)8이랑 나머지2 랑 다시 나눠준다.
       // 8 % 2 = 0       => 나머지가 0이므로 최대공약수는 2가 된다.
        if(num2 === 0){
            return num1
        } else{
            return gcd(num2, num1 % num2)
        }
    }
    // 최대공약수 
    const gcdNumber = gcd(numerator, denominator);
    // 분자와 분모에 최대공약수를 각각 나눠준다. 
    return [numerator/gcdNumber, denominator/gcdNumber ]
}

느낀점

0단계 문제로 문제 자체는 간단하지만 수학을 정말 정말 못하는 나에겐 쉬운 문제는 아니였다... ㅠ.ㅠ
유클리드 호제법 알고리즘에 대해 1시간 넘게 찾아보고 이해한 후 겨우 풀었다..휴

profile
Frontend Developer

0개의 댓글