[JS] Toy2 20. fractionConverter
in CODING TEST on Codestates
숫자를 매개변수로 받아서 문자열 형태의 분수로 리턴하는 함수를 작성하세요.
Codestates의 소프트웨어 엔지니어링 커리큘럼에서 제공되는 문제입니다. 😀
1. Example
Your output should look something like:
Example: toFraction(0.5) === '1/2';
정수와 대분수들은 가분수로 바꿔서 리턴해야 합니다.
(가분수 : 분자가 분모보다 크거나 같은 분수)
Example: toFraction(3.0) === '3/1';
Example: toFraction(2.5) === '5/2';
2. Pseudocode
const toFraction = function (number) {
// TODO: 코드를 여기에 작성합니다.
};
2020-10-19 (9:10~10:00)
0.5 => 5/10 => 1/2
소숫점 자리만큼 10에 10을 곱한 수를 구하기. => ex. 변수 a
2.1 (number.toString().length -2 ) 만큼 10을 곱해주기 (for 문을 사용)
2.2 분자 : number * a
2.3 분모 : a
분자와 분모 모두 5의 배수가 아닐때까지 5로 나누기.
나온 값을 문자로 바꾸고 /를 껴서 리턴하기.
3. My solution
2020-10-19 (9:10~10:00)
let toFraction = function (number) {
if (number === 0) {
return '0/1';
} else if ((number.toString().length -2) === 0) {
return number.toString() + '/1'
}
let denominator = 10; //분모
let decimalPlace = number.toString().length -2; // number = 0.5면, 1을 뱉어냄
if (decimalPlace === 1) {
denominator;
} else if (decimalPlace > 1) {
for (let i = 1; i < decimalPlace; i ++) { //문모 구하기
denominator = denominator * 10
}
}
let molecule = Math.floor(number * denominator) //분자
let result = ""; // 결과 값이 됨.
if (molecule === denominator) {
return '1/1'
}
// 5의 배수가 아닐때까지 5로 나누는 함수를 작성
function notMultiplesOf5 (mol, den) {
if (mol%5 == 0 && den%5 == 0) { // 둘 다 5의 배수면 둘다 5로 나누어주고 재귀함수 돌리기
mol = mol/5
den = den/5
notMultiplesOf5 (mol, den)
}
else if (mol%5 != 0 || den%5 != 0) {
result = mol.toString() + '/' + den.toString()
}
}
notMultiplesOf5 (molecule, denominator)
return result
};
4. Reference Code
마치며
2020-10-19 (9:10~10:00)
13개의 테스트 중 10개를 통과했다. 시간은 총 50분이 걸렸으면 30분 쯤 걸렸을 때 분모와 분자의 공약수를 구하면 되는다는 점을 떠올렸다… … …
금일 스프린트가 끝이나면 분모와 분자의 공약수를 구하는 방식으로 다시 풀어봐야겠다….