TIL 7일차 - parseInt와 Math.floor의 차이 그리고 반복문

박진현·2021년 6월 20일
0

TIL

목록 보기
7/71

parseInt()와 Math.floor의 차이

parseInt()는 소숫점을 버리는 것이고 Math.floor는 소숫점을 내림하는 것 이다.
parseInt(123.12), Math.floor(123.12)를 하면 둘다 123이 나오지만
숫자가 음수 일땐 다른 결과값을 가져온다
parseInt(-1.5) 는 -1 를
Math.floor(-1.5)는 -2 를 나타낸다.

-1.5를 내림하면 더 작은 수 인 -2가 나오기 때문이다.

또, 파라미터에 여러가지 값을 넣을 경우
parseInt(5,2,3) // 5가 나오지만
Math.floor(5,2,3) // NaN 이 나오는 차이가 있다.

정리하자면 Math.floor는 여러 값을 받을 경우 NaN, parseInt는 제일 첫 번째 값을 나타내고
Math.floor는 소숫점 이하를 내리고 , parseInt는 소숫점 이하를 버린다

지옥의 반복문

이중 for문을 이용해서 2부터 num까지의 소수를 '2-3-5-7-...-num' 으로 나타내는 문제.. 지옥이다
내가 이해한대로 풀이를 해보면

function  listPrimes(num){
  let isNumPrime = true;
  for (let i = 2; i < num; i++){
    if (num % i === 0){
      isNumPrime = false;
    }
  }
  return isNumprime
}

이 로직을 기반으로 풀어보면

function isPrime(num){
  let isNumPrime = true;
  for (let i = 2; i < num; i++){
    if (num % i === 0){
      isNumPrime = false;
    }
  }
  return isNumPrime;
}

function listPrimes(num){
  let result = '2';
  for (let i =3; i <= num; i++){
    if(isPrime(i)){
      result = result + '-' + i
    }
  }
  return result;
}
      

이걸 이중 for문으로 담아보면

function listPrimes(num){
 let result = '2';
  for (let i = 3; i <=num; i++){
    let isPrime = true;
    for (let j = 2; j < i; j++){
      if (i % j === 0){
        isPrime = false;
        break;
      }
    }
    
    if(isPrime(i)){
      result = result + '-' + i;
    }
   return result
}

하지만 최적화 되어 있지 않기 때문에 아래와 같이 최적화 한다.

function listPrimes(num){
  let result = '2';
  for(i=3;i<=num;i+=2){
    let isPrime = true;
    let sqrt = parseInt(Math.sqrt(i));
    for(j=3;j<=sqrt;j+=2){
      if(i%j ===0){
        isPrime = false;
        break;
      }
    }
    
    if(isPrime){
      result = result + '-' + i;
    }
  }
  return result;
}

이렇게 푼다..

그리고 만약 반복문에서 마지막 글자를 빼고 싶다면
return result.slice(0, result.length-1) 을 입력하면 된다!

profile
👨🏻‍💻 호기심이 많고 에러를 좋아하는 프론트엔드 개발자 박진현 입니다.

0개의 댓글