[JS] Toy2 20. fractionConverter


숫자를 매개변수로 받아서 문자열 형태의 분수로 리턴하는 함수를 작성하세요.


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)

  1. 0.5 => 5/10 => 1/2

  2. 소숫점 자리만큼 10에 10을 곱한 수를 구하기. => ex. 변수 a

    2.1 (number.toString().length -2 ) 만큼 10을 곱해주기 (for 문을 사용)

    2.2 분자 : number * a

    2.3 분모 : a

  3. 분자와 분모 모두 5의 배수가 아닐때까지 5로 나누기.

  4. 나온 값을 문자로 바꾸고 /를 껴서 리턴하기.



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분 쯤 걸렸을 때 분모와 분자의 공약수를 구하면 되는다는 점을 떠올렸다… … …

금일 스프린트가 끝이나면 분모와 분자의 공약수를 구하는 방식으로 다시 풀어봐야겠다….




© 2020. by RIVER

Powered by RIVER