Code개발일지
[JS] 반복문 for, while
Minhhk
2022. 10. 25. 23:19
4일차
오늘 코플릿에서의 혼란스러웠던 문제 중 두 가지를 뽑았다! 정처기하면서 c, java, python 문제를 풀어보면서 반복문? 쯤이야 그냥 풀어 버릴 줄 알았지만 조건에 꼬리를 달며 문제가 나와서 1차 혼란 → 2차 혼란ㅋㅋㅋ 문제를 풀어도 짜여진 코드를 푸는 거만 하다보니;; 새로 짜는 것이 많이 약해 진 것 같다..ㅠ 보강을 좀 해야 하겠다😵💫 하면서 늘겠지??
for >>
for ( 초기화 , 조건식 ,증감문) {}
let sum = 0 ;
for (n=1; n<=4; n++) {
sum += n ;
}
consol.log(sum); // 0 1 2 3 4 의 합 === 10
while >>
**초기화**
while(**조건식**) **{**
**증감문
}**
let sum = 0;
let n = 1;
while (n<=4) {
sum += n ;
n++;
}
console.log(sum) ; // 10
코플릿 반복문_17_isPrime
문제
1 이상의 자연수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다.
입력
인자 1 : num
- number 타입의 수
출력
- boolean 타입을 리턴해야 합니다.
입출력 예시
let output = isPrime(2);
console.log(output); // --> true
output = isPrime(6);
console.log(output); // --> false
output = isPrime(17);
console.log(output); // --> true
👉🏻 우선 소수의 특징
- 1보다 커야함
- 2를 제외한 짝수는 아님
- 3부터의 소수는 약수가 1과 자기자신
을 생각해서 짜보자!
실습
function isPrime(num) {
if (num === 1) {
return false;
}
if (num === 2) {
return true;
}
if (num % 2 === 0) {
return false;
}
let sqrt = parseInt(Math.sqrt(num));
// num의 약수는 num의 제곱근을 기준으로 좌우 대칭을 이룬다 -> 따라서 제곱근 까지만 확인해도된다
// 1*18, 2*9, 3*6, Math.sqrt(18), 6*3,9*2,18*1 //
// 4 * 4
// num이 18 일 때, sqrt === 4
for (let i = 3; i <= sqrt; i += 2) { // 3보다 큰 홀수를 돈다
if (num % i === 0) { // 3으로 나눌 때 나머지가 0이면? 3의 배수가 되기때문에 약수존재해서ㅈㅈ
return false;
}
}
return true; // 위 조건문 반복문 다 미해당 시 트루~
}
코플릿 반복문_18_listPrimes
문제
2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴해야 합니다.
입력
인자 1 : num
- number 타입의 정수 (num >= 2)
출력
- string 타입을 리턴해야 합니다.
- 2-3-5-7의 형식으로 리턴해야 합니다.
주의 사항
- 이중 반복문(double for loop)을 사용해야 합니다.
입출력 예시
let output = listPrimes(2);
console.log(output); // --> '2'
output = listPrimes(6);
console.log(output); // --> '2-3-5'
output = listPrimes(18);
console.log(output); // --> '2-3-5-7-11-13-17'
실습
function listPrimes(num) {
// 첫번째 반복문 : num 보다 작은 수들 순회 > 각각 소수인지 확인해서 문자열로 합침
// 두번째 반복문 : 소수인지 아닌지 확인 작업
let result = '2'; // 출력예시가 2부터 시작
for(prime = 3; prime <= num; prime += 2){
let isPrime = true;
for(i = 3; i < prime; i += 2){
if(prime%i === 0) {
isPrime = false
}
}
if(isPrime === true) {
result = `${result}-${prime}`
}
}
return result;
}
💡 다른 방법2 << 나는 이게 더 나은 듯한!