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) 을 입력하면 된다!