반복문 중 변수선언

태로샐러드·2021년 6월 21일
0

javascript 기초

목록 보기
3/22
post-custom-banner

1 이상의 자연수를 입력받아 2부터 해당 수까지의 소수를 리턴

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

전체적인 로직은 파악한 상황, 그런데 11이상의 소수부터 리턴이 안됨..
이유를 몰라 한참 헤매었다. 그러다가 원인을 알게됨.
바로 위 코드에서 주석 처리한 부분이 문제였던 것.(표시를 위해 주석처리함)

반복문 밖에 저렇게 isPrime = true 를 선언하게 되면,
반복문 내 i % n === 0 이 되는 첫번째 9 % 3 === 0 구간에서
isPrime은 false로 변한다.
그렇게 되면 그때부터 반복문 내에 있ㄴㄴ

if (isPrime === true) 

이 부분의 의미가 사라진다. 반복문이 재실행되도 isPrime은 여전히 false이기 때문.
그래서 결론은 반복문이 재실행 될때마다, isPrime = true값을 새로 부여해야 한다.

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

(주석처리) 이렇게 반복문 내에 isPrime = ture; 를 써줘야 한다.

profile
기획, 개발공부, 그 외 잡다한 여정 기록 (SEMI로)
post-custom-banner

0개의 댓글