코플릿/반복문(소수찾기)

수민·2022년 10월 25일
0

코플릿

목록 보기
1/11

문제

2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴해야 합니다.

🐻‍❄️ 입력

number 타입의 정수 (num >= 2)

출력

  • string 타입을 리턴해야 합니다.
  • 2-3-5-7의 형식으로 리턴해야 합니다.

주의사항

  • 이중 반복문(double for loop)을 사용해야 합니다.

입출력 예시

let output = Primes(2);
console.log(output); // --> '2'

output = Primes(6);
console.log(output); // --> '2-3-5'

output = Primes(18);
console.log(output); // --> '2-3-5-7-11-13-17'

힌트

  • 반복문의 break 문에 대해서 학습합니다. (javascript loop break)

해설

이중 반복문에 알아야되는 문제이고
잘모르면 어렵기떄문에 알아둬야함.

// 바깥쪽 반복문의 변수를 left로 선언하고, 1에서 3까지 돌린다
for (let left = 1; left <= 3; left++){

// 안쪽 반복문의 변수를 right로 선언하고, 똑같이 1에서 3까지 돌린다
  for (let right = 1; right <= 3; right++){
    console.log(`${left}-${right}`)
  }

}

소수


// 1부터 자기자신까지 나눠보고 나누어 떨어지면 소수가 아니다 

function Primes(num) {
  let result = '2'
  // 2와 num을 포함해서 그사이의 소수를 리턴해주면 된다
  // 2는 무조건 들어가므로 결과값을 2부터 시작하면 된다
  
  // 2부터 시작했으니 3부터 비교해주고 num을 포함해야 하니 num까지 비교한다
  // 모든 짝수는 소수가 아니므로 i+=2씩 더해서 홀수만 확인한다
  for(let i = 3; i <= num; i+=2){
    let isprime = true;
    // 반복문안에 소수가 맞는지 값을 담아줄 변수를 선언해주고 
    // 소수가 아니라면 false로 바꿔준다
    for(let j = 2; j < i; j++){
      // num을 나눌 숫자 j 를 반복한다 
      // 짝수는 바깥쪽 반복문의 증감문으로 제외시켰고, 
      // 2는 처음부터 결과값에 들어가있으므로 3부터 시작하고 홀수만 고려한다
      if(i%j === 0){
        isprime = false;
        break;     
        // i가 j로 나누어 떨어지면 1과 자기자신 이외의 약수가 있으니 소수가 아니다
        // 소수가 아닌걸 확인하면 그 뒤까지 돌아볼 필요가 없으니 break문로 끝내주면된다
      }
    }  
    // 안의 조건문을 끝내고 나왔고 소수가 아니면 false로 바뀌었다
    // isprime true라면 소수이니 result에 넣어준다 
    if(isprime === true){
      result += `-${i}`;
    }  
  }
  return result
}




참고블로그 : https://velog.io/@support/%EC%BD%94%ED%94%8C%EB%A6%BF-%EB%B0%98%EB%B3%B5%EB%AC%B8%EC%86%8C%EC%88%98%EC%B0%BE%EA%B8%B0
profile
헬창목표

0개의 댓글