알고리즘 - freeCodeCamp - Smallest Common Multiple.part1

ki_blank·2019년 12월 4일
0

algorithm

목록 보기
10/18

문제

두 숫자를 포함한 두 숫자 사이의 모든 값들의 최소공배수를 구하시오.

예시

[1,5] --> 1, 2, 3, 4, 5 의 최소 공배수는 60
[10, 1] --> 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 의 최소 공배수는 2520

풀이 - 진행중

function smallestCommons(arr) {
  const sortedArr = arr.sort((a, b) => {
    return a - b;
  });

  let straightNumbers = [];

  for (let i = sortedArr[0]; i <= sortedArr[1]; i++) {
    straightNumbers.push(i);
  }

  return arr;
}

let one = 23;
let four = 18;

function addRecursion(num1, num2) {
  const addnum1 = one;
  const addnum2 = four;
  console.log(num1, num2);
  if (num1 === num2) {
    return num1;
  }
  if (num1 < num2) {
    return addRecursion((num1 + addnum1), num2);
  } else if (num1 > num2) {
    return addRecursion(num1, (num2 + addnum2));
  }
}

console.log(addRecursion(one, four));
smallestCommons([1,5]);

아직 해결하지 못하고 진행중이다. 처음에 생각을 했을 때 어떻게 전부 나누고 곱할지 생각했다. 공통된 수로 안 나눠질 때까지 나눈뒤 똑같이 나눈 값들을 곱하면 될거 같다고 생각했다. 하지만 생각처럼 쉽지가 않았다.
다른 방법으로 소수를 활용하는 방법이 있을거 같다라는 생각이 들었다. 하지만 이것 또한 복잡하다고 생각됐다. 어떻게 하려고 했냐면, 두 수의 범위 안에 있는 소수를 이용해서 각 숫자를 반복문으로 돌려서 각 숫자를 소수로 나눈다. 그러면 몫이 나올 것이고 몫을 또 나눈다. 나눈 반복되는 값을 객체에 저장해서 소수로 몇번 나눴는지 카운터를 알아내고 객체에 있는 key 와 value를 곱하고 곱한 값을 다른 소수와 같이 곱하면 최소공배수가 된다.
하지만 이건 너무 복잡하다는 생각이 들었다. 다시 생각했다. freeCodeCamp 에 힌트를 주는 페이지가 있어서 그걸 활용했다. 보니깐 곱은 같은 숫자를 여러번 더한 것을 편리하게 숫자로 표현한 거와 같다라는 힌트를 얻게 됐다.
바로 생각난게 여러번 같은 숫자를 더하는 거면 두 수가 같을 때까지 더하면 된다고 생각했고, 재귀함수를 활용할 수 있다는 생각을 했다. 위에 보면 addRecursion함수가 있다. 두 수가 같을 때까지 계속 더하는 함수를 만들었다. 알고리즘 푸는 시간을 정해서 하고 있는데 정한 시간에 하지 못해서 진행중이다. 내일은 해결할 수 있을 거 같다.

profile
갈고 닦자.

0개의 댓글