Daily Front_Minhhk

[JS] 반복문 for, while 본문

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. 1보다 커야함
  2. 2를 제외한 짝수는 아님
  3. 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 << 나는 이게 더 나은 듯한!