코플릿 [반복문] 복기 10~

usreon·2021년 3월 27일
0

10_makeMultiplesOfDigit2

  • 두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴해야 합니다.
  • 입력: number 타입의 정수 (num1 >= 0)
  • 출력: number 타입을 리턴해야 합니다.
  • 주의사항: 반복문(for)문을 사용해야 합니다.
    num1이 num2보다 작지 않을 수도 있습니다.
    0은 2의 배수가 아니라고 가정합니다.

처음 작성한 코드

function makeMultiplesOfDigit2(num1, num2) {
  let sum = 0;
  if(num1>num2){
    for(let i=num2; i<=num1; i++){
      if(i%2===0 && i!==0){ 
        sum = sum + 1      
      }
    } 
  return sum;
  }

  for(let i=num1; i<=num2; i++){
    if(i%2===0 && i!==0){ 
      sum = sum + 1      
    }
  }
  return sum;
}

주의사항을 고려하여 num1이 num2보다 클 경우와 num1이 num2보다 작을 경우로 나눠서 if문과 for문을 작성하였다. 상당히 길고 가독성도 안 좋은 코드인 것 같다.

재할당을 해주면 어떨까?

수정한 코드

function makeMultiplesOfDigit2(num1, num2) {
  let sum = 0,
  x = num1, // 값 재할당을 위해 num1, num2를 변수에 할당하여
  y = num2; // 선언해준다
  
  if(num1 > num2){ //만약 num1이 num2 보다 크다면
    x = num2       // x= num2, y= num1이 된다
    y = num1 
  }

  for(let i=x; i<=y; i++){ //num1부터 num2까지 반복문을 돈다
    if(i%2===0 && i!==0){ //2의 배수이면서 0이 아닌 경우
      sum = sum + 1      // 1씩 더해준다
    }
  }
  return sum;
}

16_getSumOfFactors

  • 수를 입력받아 약수(factor)의 합을 리턴해야 합니다.
  • 파라미터: number 타입의 수
  • 출력: number 타입을 리턴

작성한 코드

function getSumOfFactors(num) {
  let sum = 0;
  //num의 약수부터 구해보자 
  for(let i=1; i<=num; i++){
    if(num % i === 0){ //num % i === 0 일때 i은 num의 약수
      sum = sum + i; // 약수들의 합
    }
  }
  return sum;
}

17_isPrime

  • 수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다
  • 파라미터: number 타입의 수
  • 출력: boolean 타입을 리턴
  • 힌트: 자바스크립트 내장 객체인 Math를 활용해 불필요한 연산을 줄일 수 있습니다.
    (javascript square root 또는 자바스크립트 제곱근)
function isPrime(num) {
  //소수란? 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수
  let result = true; //result값을 true로 할당해준다
  if (num === 2) { // 2는 소수이다
    return result;
  }

  for (let i = 2; i < num; i++) {
    // 어떤 수든 1과 자기 자신을 나눈 나머지 값은 무조건 0이다
    // 때문에 i를 2부터 시작하게 했고 길이를 num보다 작게 뒀다
    if (num % i === 0) { 
      result = false; 
      // 1과 자기 자신이 아닌 다른 값으로 나눴을 때 나머지 값이 0이라면
      // 소수가 아니므로 result값을 false로 재할당
    } 
  } return result; // 그게 아니라면(소수라면) 그냥 result값을 반환
}

18_listPrimes

  • 수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴해야 합니다.
  • 파라미터: number 타입의 정수 (num >= 2)
  • 출력: string 타입을 리턴해야 합니다.
  • 2-3-5-7의 형식으로 리턴해야 합니다.
  • 주의 사항: 이중 반복문(double for loop)을 사용해야 합니다.

조헌터 형님이 보내주신 코드

function listPrimes(num) {
    let result = ''; //빈 문자열 선언
    for(let i = 2; i<=num; i++) { //2부터 num까지
        var check = true;
        for(let j = 2; j<i; j++) { 
		//2부터 시작하는 이유는 파라미터가 num>=2니까 
		//이러면 2%2==0로 무조건 2가 소수로서 문자열에 들어가게 됨
          	//자기 자신과 나누면 무조건 나머지가 0이니까 j<i로 설정
            if(i % j === 0) { //1과 자기 자신이 아닌 나눈 수로 나눴을 때 나머지가 0이라면 소수가 아님
                check = false; // 그때 check 가 false로 재할당 되면서
                break; // i%j===0 일 때 더이상 j가 증가하지 않고if문을 빠져나간다
            }
        }
        if(check) { //만약 check가 true면 (소수라면 
            if(result.length === 0) { //빈 문자열에
                result += i + ""; // result = result + i +"" 로 재할당
            } else {
                result += "-" + i; //빈 문자가 아니라면 ,,?
            }

        }
    }
    return result;
}
profile
할 수 있다는 생각이 정말 나를 할 수 있게 만들어준다.

관심 있을 만한 포스트

0개의 댓글