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으로 둘다 나누면 그게 기약분수
minNum
을 설정하고, minNum = minNum -1
을 통해 최대공약수를 search 한다는 아이디어를 떠올리는 것 자체가 힘들었다.
▷필요한 데이터가 무엇인지부터 확실히 하자.
if(denum%minNum === 0 && num%minNum === 0){
return [denum/minNum, num/minNum];
}
minNum = minNum - 1;
search 하는 과정에서 위 코드가 반복된다는 것을 알았다.
그러나 이를 어떻게 반복문으로 구현할 지 떠오르지 않았는데,
while(true)를 통해 원하는 값이 나올 때까지 반복실행시키는 것이 새로웠다.
지금까지 while(종료조건)의 형태만 생각했었다.
이런 방식의 사용법도 있다는 것을 알아두자.