[코플릿] 반복분

tia·2021년 10월 12일
0

코플릿

목록 보기
1/5
post-thumbnail

🐥 반복문

07_makeDigits2

문제

수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열 리턴

주의 사항

  • 반복문(while)문 사용
  • for문 사용은 금지
  • 숫자(number string) 사이를 '-'로 구분('1-2-3-4-5')

입출력 예시

let output = makeDigits2(5);
console.log(output); // --> "1-2-3-4-5"

output = makeDigits2(7);
console.log(output); // --> "1-2-3-4-5-6-7"

나의 코드

function makeDigits2(num) {

  let result = "";
  let count = 1;

  while(count <= num){
    if(num === 1){
      result = String(1);
      break;
    } else if (count === num){
      result = result + String(count);
      break;
    }
    result = result + String(count) + "-"
    count++;
  }

  return result;
}

String 타입 리턴을 위한 변수 result 선언
✅ while문 사용을 위한 변수 count 선언
✅ while문 안에서, num이 1이라면, result 변수에 String(1)을 할당해서 while문 탈출
✅ while문 안에서, count가 num이랑 같게 되면 "-"가 붙지 않기 위해 else if 구문 사용


❓ 코드가 조금 더 간결해 질 수 없을까? 🤨🤨 while문 안에 if/else if문을 없애고 싶다.


Reference

function makeDigits2(num) {
  let result = '1';

  let i = 2;
  while (i <= num) {
    result = result + `-${i}`;
    i++;
  }

  return result;
}

num이 1인 경우 "1"만 리턴하면 되므로 result 변수에 "1"을 할당
while문 작동 조건을 아예 num이 2이상인 경우로 설정
✅ ❗️String + num = String ❗️


num = 3 이라고 가정하고 Reference 코드에 적용
1. while문 작동 조건인 i<=num이 참
2. while문 작동
3. result 변수에 "1" + -2 = "1-2"의 값이 할당
4. i++로 인해 i의 값은 3이 됨
5. while문 작동 조건인 i<=num이 거짓이 됨
6. while문 종료 후 result 값을 반환
7. makeDigits2 함수 종료


09_makeMultiplesOfDigit

문제

수를 입력받아 1부터 해당 수까지의 수 중에서 3의 배수로만 구성된 문자열 리턴

주의 사항

  • 반복문(for)문 사용
  • 숫자(number string) 사이 구분 X ('3691215')
  • 3의 배수가 없을 경우, 빈 문자열 리턴

나의 코드

function makeMultiplesOfDigit(num) {
  
 let result = "";

 for(let i=1; i<=num;i++){
   if(i % 3 === 0){
     result = result + String(i);
   }
 }

 return result;
}

Reference

function makeMultiplesOfDigit(num) {
  let result = '';

  for (let i = 3; i <= num; i += 3) {
    result = result + String(i);
  }

  return result;
}

✅ for문 자체를 3의 배수로만 돌리도록 조건식 설정


10_makeMultiplesOfDigit2

문제

두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴

주의 사항

  • 반복문(for)문 사용
  • num1num2보다 작지 않을 수도 있음
  • 0은 2의 배수가 아니라고 가정

입출력 예시

let output = makeMultiplesOfDigit2(12, 8);
console.log(output); // --> 3

output = makeMultiplesOfDigit2(0, 0);
console.log(output); // --> 0

output = makeMultiplesOfDigit2(2, 2);
console.log(output); // --> 1

나의 코드

function makeMultiplesOfDigit2(num1, num2) {

  let start = num1;
  let end = num2;
  let count = 0;

  if(num1 > num2){
    start = num2;
    end = num1;
  }

  for(let i=start; i<=end; i++){
    if(i % 2 === 0 && i !== 0){
      count++;
    }
  }

  return count;
}

Reference

  if (start === 0) {
    start = 1;
  }

  for (let i = start; i <= end; i++) {
    if (i % 2 === 0) {
      count += 1;
    }
  }

✅ 다른 부분은 나와 같았고, 다른 부분은 if 구문 부분: 0은 2의 배수가 아니므로 count될 필요가 없으니, start 변수에 0이 할당된다면 1로 바꿔주면 간단해짐


17_isPrime

문제

1 이상의 자연수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다.

입출력 예시

let output = isPrime(2);
console.log(output); // --> true

output = isPrime(6);
console.log(output); // --> false

output = isPrime(17);
console.log(output); // --> true

나의 코드

function isPrime(num) {

  if(num === 1){
     return false;
   } else if(num === 2){
    return true;
  }
  
  let isPrime = true;
   
  for(let i=2;i<num;i++){
    if(num % i === 0){
      isPrime = false;
    }
  }

  return isPrime;
}

✅ num=1일때, false로 / num=2일때, true로 함수 종료
✅ isPrime 변수 이용: 소수라면 자기자신으로 나눌때만 나머지 값이 0이므로 다른 수로 나누어지게 되면 isPrime에 false값 할당


Reference

function isPrime(num) {
  let sqrt = parseInt(Math.sqrt(num));

  if (num === 1) {
    return false;
  }

  if (num === 2) {
    return true;
  }

  if (num % 2 === 0) {
    return false;
  }

  for (let i = 3; i <= sqrt; i += 2) {
    if (num % i === 0) {
      return false;
    }
  }

  return true;
}

0개의 댓글