분수의 덧셈 in 프로그래머스

김병화·2022년 11월 4일
0
function solution(denum1, num1, denum2, num2) {
    let denum = (denum1*num2) + (denum2*num1);
    let num = num1*num2;
    
    let minNum; // point. 필요한 데이터를 생각하여 변수를 설정하여 얻는다.
    if(denum>num) minNum = num;
    else minNum = denum;
    
    while(true){ // point. 반복되는 코드에 while(true)를 씌워 원하는 값이 나올 때까지 실행시킨다.
    if(denum%minNum === 0 && num%minNum === 0){
        return [denum/minNum, num/minNum];
    }
    minNum = minNum - 1;
    }
}

// #기약분수 만들기
// 1. 최대공약수를 찾는다.
// 2. How?
// 3. 분자 분모 중 작은 수 = minNum으로 설정
// 4-1. minNum을 분자 분모 나눠보고 둘 다 나머지=0 이면 기약분수
// 4-2. 안나눠떨어지면 minNum -= 1
// 5. 4번과정 반복 중 나누어떨어지는 minNum으로 둘다 나누면 그게 기약분수

이번 문제에서 새롭게 느낀 것.

point 1

minNum을 설정하고, minNum = minNum -1 을 통해 최대공약수를 search 한다는 아이디어를 떠올리는 것 자체가 힘들었다.

▷필요한 데이터가 무엇인지부터 확실히 하자.

point 2

if(denum%minNum === 0 && num%minNum === 0){
        return [denum/minNum, num/minNum];
    }
    minNum = minNum - 1;

search 하는 과정에서 위 코드가 반복된다는 것을 알았다.
그러나 이를 어떻게 반복문으로 구현할 지 떠오르지 않았는데,
while(true)를 통해 원하는 값이 나올 때까지 반복실행시키는 것이 새로웠다.
지금까지 while(종료조건)의 형태만 생각했었다.
이런 방식의 사용법도 있다는 것을 알아두자.

0개의 댓글