0723 TIL

냐하호후·2021년 7월 23일
0

TIL

목록 보기
12/101

HTML

그외

조건문 안에 처음 변수를 선언하면 scope때문에 나중에 그 변수를 사용할 수 없다. 코플릿 풀때는 변수선언은 전역에다가 하자.

반복문 18번

function listPrimes(num) {
let result = '2'
//for문밖에 isPrime을 true라고 하면 for문안에서 false가 되고 다시 true가 될 수 없다
for(let i = 3 ; i <= num ; i = i+2){
  let isPrime = true
  for(let j = 2 ; j < i ; j++){
    if(i % j === 0){ 
      isPrime = false
     break
    }
  }
 if(isPrime){
   result = result + '-' + i
   }
}
return result
}

//num을 입력받으면 2부터 num까지 소수들을 리턴해야한다.
//i가 소수인지 아닌지 알아야해?  i가 소수가 아니면 그냥 홀수인지 짝수인지 구하는 로직이된다.

//변수 result를 선언한다. '2'를 할당한다.
//for문을 만든다. i = 3 ; i <= num ; i++ (소수?)
//안쪽 for문을 만든다. j = 2 ; j < i ; j++ (j로 소수를 나누어 줄 것이다.)
//만약 i를 j로 나누었을 때 나머지가 0이 아니라면(소수이다)
//break로 j for문의 작동을 멈춘다.
//그렇지 않다면 (소수라면)
//result = result + i
//result를 리턴한다.
  1. i가 소수여야하는지를 몰랐다.

    i가 아무 수라면 이 로직은 짝수인지 홀수인지 구하는 로직이 된다. 그렇기 때문에 isPrime이라는 변수가 필요한 것이다.

  2. j는 num보다 작은게아니라 i보다 작아야한다.

  3. isPrime의 필요성

    isPrime이라는 변수를 쓰지 않으면 소수를 구하는게 아니라 그냥 홀수를 찾는 로직이된다.

  4. isPrime 선언의 위치

    for문 밖에 선언과 할당을 하려고했었다.
    for문 밖에서만 isPrime을 true라고 할당하면 for문안의 조건문 안에서 true인적이 없어서 값이 false로 바뀌면 i가 증가해서 true인 값이 되어야하는데도 다시 true로 변할 수 없다.

7/28
다시 풀어보았다

function listPrimes(num) {
  let result = '2'
 
  for(let i = 3; i <= num ; i = i+2){
    let isPrime = true
    for(let j = 2; j < num ; j++){
      if(i%j === 0 && i !== j){
        isPrime = false
        break
      }
    }
    if(isPrime === true){
    result = result + '-' + i
    }
  }
  return result
}
profile
DONE is better than PERFECT

0개의 댓글

관련 채용 정보