본문 바로가기
Today I learned

2020 09 24

by soheemon 2020. 9. 24.
function pascalTriangle(step){
  var numbers = [];
var cnt;
var plusOrMul;
var indexRef = 0;
for(var i = 1; i <= step; i++){
  numbers.push(i);
  if(i <= 3) continue; //1-3까지는 예외
  
  cnt = Math.trunc(i / 2) - 1;  //반복회수
  plusOrMulAtEnd = i % 2 //0: 끝부분에 곱한다, 1: 끝부분에 더한다.

  var j = 1;
  var num;
  while(j <= cnt){
    endOfArray = (numbers.length - 1);  //index 접근을 위해 -1

    if(j == cnt && plusOrMulAtEnd == 0){
      num = numbers[endOfArray - cnt] * 2;
      indexRef++;
    }else{
      num = numbers[endOfArray - indexRef] + numbers[endOfArray - (indexRef + 1)]
    }
    numbers.push(num)
    j++;
  }
}
return numbers;
}

/*
* 중복될 숫자인경우 push 하지 않음
*/

function exceptNumber(num, arr){
  for(var i = 1; i < arr.length; i++){
    if(num == arr[i]) return false;
  }
  return true;
}

/*
*   range를 받아서 range이하의 소수list를 반환한다.
*
*/
function getPrimeList(range){
  function isPrime(num){
        for(var i=2; i*i<=num; i++){
            if(num % i == 0) return false;
        }
        return true;
}
  var primeList = [];
  for(var i = 2; i <= range; i++){
    if(isPrime(i)) primeList.push(i);
  }
  return primeList;
}

function squared(number){
  return number * number;
}

/*
* array를 입력받아서 squareFree수를 구한후 그들의 합계를 반환한다.
* 입력값은 오름차순 정렬되어있음을 가정한다.
*/
function getSquareFreeNumList(arr){
  //var arr = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20, 21, 35]; // 이 수들이 어떤 소수의 제곱으로도 나뉘지 않는지 확인하기..
  var primeList = getPrimeList(arr[arr.length - 1])
  var sum = 0;
  for(var i = 0; i < arr.length; i++){
    var res = true;
    for(var j = 0; j < primeList.length; j++){
      var squaredValue = squared(primeList[j]); //해당 수의 제곱
      if(arr[i] % squaredValue == 0){
        res = false;
        break;
      }
    }
    if(res) sum += arr[i];
  }
  return sum;
}

(function testMain(){
  console.log(pascalTriangle(52));
  
})()

-  프로젝트 오일러 문제를 푸는데 필요한 함수를 만들어 보았다.

- - 파스칼의 삼각형에서 중복되지 않도록 n층의 모든 수를 구하려고 했으나.. 미처 고려하지 못했던 부분에서 중복이 발생했다.. 하아...ㅠㅠ

+ js에서 나눗셈 할때 소수점 첫째자리까지 구해지는것을 처음 알았다..

+ 수학적인 지식이 없다면, 결국 규칙을 찾아서 구현해야 하는데, 그 방법이 노가다 같아서 코드가 썩 마음에 들지 않았다.

'Today I learned' 카테고리의 다른 글

2020 09 26  (0) 2020.09.26
2020 09 25  (0) 2020.09.25
2020 09 23  (0) 2020.09.23
2020 09 21  (0) 2020.09.21
2020 09 19  (0) 2020.09.19

댓글