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-1 / 1-2 / 1-3
2-1 / 2-2 / 2-3
3-1 / 3-2 / 3-3
바깥쪽 반복문의 변수 left가 1일 때, 안쪽 반복문의 변수 right가 1~3까지 돌고
안쪽 반복문이 한 바퀴 다 돌고 끝난 후에야 바깥쪽 반복문 변수 left가 2로 넘어간다
그리고나서 안쪽 반복문의 변수 right는 1~3까지 한번 더 돈다
left가 3일때에도 right가 1~3까지 또 돌고 이중반복문이 끝나게 된다
// 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
}