[Algorithm] 분수의 덧셈

yongkini ·2022년 10월 11일
0

Algorithm

목록 보기
54/55

프로그래머스 분수의 덧셈 문제

: while 문을 써서 분모를 통합하고, 그만큼을 분자에 곱해주고, 말그대로 분수의 덧셋 패턴을 이용해서 분수를 더해 준다음에 구한 값의 분자, 분모의 공약수를 써서 다시 기약 분수로 나타내면 되는 문제이다. 나는 굳이(?)라기보다는 좀 더 효율적이기에 유클리드 호제법을 통해서 최대공약수를 구했고, 그 값을 이용해서 최소 공배수를 구해서 문제를 풀었다. 유클리드 호제법을 통해서 문제를 풀어도 while문을 쓰지만 완전탐색법을 쓰는 것보다(그 숫자가 커졌을 경우) 훨씬 효율적이므로(시간 복잡도 면에서) 이 방법을 써서 풀었다.

: 코드

function solution(denum1, num1, denum2, num2) {
    var answer = [];
    // 1) 분모를 최대 공배수로 통합(분자에도 값을 곱해줌)
    // 2) 그리고 분자끼리 더해줌 
    // 3) 결과를 가지고 최대공약수를 구하고, 그둘을 최대공약수로 나눈 값이 정답
    const getUclid = (a,b) => {
        while(true) {
            r = a % b;
            if(r===0) {
                return b;
            }
            a = b;
            b = r;
        }
    }
    const LCM = getUclid(num1, num2);
    const GCM = (num1 * num2) / LCM;
    const val1 = denum1 * (GCM / num1);
    const val2 = denum2 * (GCM / num2);
    const resultVal = val1 + val2;
    const resultLCM = getUclid(resultVal, GCM);
    answer[0] = resultVal / resultLCM;
    answer[1] = GCM / resultLCM;
    
    return answer;
}

피드백
: 오랜만에 알고리즘 문제 풀이에 도전해봤는데 역시나 다까먹었다. 유클리드 호제법도 외워서 풀었어서 결국 인터넷 검색을 통해 푼거나 마찬가지다. 하지만 뭐 다시 외우면 되지 않나?! ㅎ

profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글