프로그래머스 Lv.0 [분수의 덧셈] (정답률 하위 TOP 10)

세나정·2023년 4월 20일
0
post-thumbnail

최소 공배수 (LCM) 알고리즘

무한루프를 걸어놓고
점점 증가하는 lcm을 둘 모두로 나누었을 때 0이 되는 값이 있다면
그 값이 최소공배수임

    // 최소 공배수 구하기
    lcm = 1;
    while(true) {
        if ( (lcm % denom1 === 0 ) && (lcm % denom2 === 0 )) break;
        else lcm++
    }

나는 둘의 최소 공배수를 구해서 그 값에 맞게 계산을 하려 했는데
기약분수로 나타내야하기 때문에 너무 번거로워졌다

그래서 어릴 때 배운 분모 통분 후 대각선 곱으로 x와 y를 구해줌

내 풀이

function solution(numer1, denom1, numer2, denom2) {
   // // 최소 공배수 구하기
   // lcm = 1;
   // while(true) {
   //     if ( (lcm % denom1 === 0 ) && (lcm % denom2 === 0 )) break;
   //     else lcm++
   // }
   
   // 분모는 분모끼리의 곱
   y = denom1 * denom2
   // 분자는 대각선의 곱
   x = numer1*denom2 + numer2*denom1
	 
  
   // 기약분수로 만들기 위해 최대 공약수를 찾아줌
   maxNum = 0;
   for(i=1; i<=y;i++) {
       if(x%i === 0 && y%i ===0)
           maxNum = i
   }
	    return [x/maxNum, y/maxNum]
}
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글