[Programmers] 분수의 덧셈

워뇽쿤·2022년 10월 26일
post-thumbnail

문제

첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

문제의 접근

처음에는 무한 if문을 활용해서 분모1, 분모2 가 같다면 분자들끼리만 더해주고
분모끼리 다르면 곱해서 분모를 만들고 분자를 상대 분모랑 곱하는 방식으로 해서 테스트해봤는데,, 안되었고
이렇게 하면 (1/2 + 4/1 일경우) 최대공약수를 못맞추기 때문에 이런문제는 최대공약수를 활용해야한다고 한다.

Code

function solution(denum1, num1, denum2, num2) {

    let denum = num1*denum2 + num2*denum1
    // 분자를 구해준다.
    let num = num1*num2
    // 분모를 구해준다.
	let maximum = 1
	// 최대공약수를 구해준다
    for(let i = 1 ; i <= topNum ; i ++) {
        if(topNum%i === 0 && botNum%i === 0) {
            maximum = i	//같은걸로 나눴을때 동시에 나머지가 0 이되면 그게 최대 공약수
        }
    }
  	
    return [topNum/maximum, botNum/maximum]
	// 분자와 분모에 최대공약수를 나눠서 약분해준다.
}

느낀점

이거 0레벨인데 왜이렇게 어렵지?..

profile
QA 성장기

0개의 댓글