문제노트_변수, 조건문, 문자열, 반복문

Bitnara Lee·2021년 4월 17일
0

변수 정리

조건문

문자열

반복문
03_isOdd

수를 입력받아 홀수인지 여부를 리턴해야 합니다.

------------------------<입력>------------------------
인자 1 : num
number 타입의 정수
------------------------<출력>------------------------
boolean 타입을 리턴해야 합니다.
----------------------<주의 사항>----------------------
반복문(while)문을 사용해야 합니다.
for문 사용은 금지됩니다.
나눗셈(/), 나머지(%) 연산자 사용은 금지됩니다.
0은 짝수로 간주합니다.
---------------------<입출력 예시>----------------------

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

output = isOdd(-8);
console.log(output); // --> false
-------------------------------------------------------------------------
function isOdd(num) {
  // 숫자-2 계속 반복했을 때 (단, 조건은 양수일대까지) 1 -> 홀 / 0-> 짝
  // (num - 2) === 1 -> return true / === 0 -> return false;  
 
 if (num < 0) {
   num = -num           // 별개로, 만약에 num이 음수일 경우 양수로 만들어주기
 }
  // while 문을 사용해서 조건을 적어준다.
  // while()문 안에 들어갈 조건은?(num이 양수일 경우)

 while(num >=0) { // 따로 result 선언 안하고 해줘서 더 효율적인듯?? 미리미리 리턴값. 이렇게도 할수있음.
   if (num === 0) {
     return false
   } else if(num === 1) {         // 만약 num이 0이면? 짝수다! (false 리턴)
     return true                  // 만약 num이 1이면? 홀수다! (true 리턴)
   }                             // num이 0, 1 을 제외한 양수 경우 계속 -2
     num =num-2
   
 } 

        
}

10_makeMultiplesOfDigit2

두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴해야 합니다.

------------------------<입력>-----------------------
인자 1 : num1
number 타입의 정수 (num1 >= 0)
인자 2 : num2
number 타입의 정수 (num2 >= 0)
------------------------<출력>-----------------------
number 타입을 리턴해야 합니다.
---------------------<주의 사항>----------------------
반복문(for)문을 사용해야 합니다.
num1이 num2보다 작지 않을 수도 있습니다.
0은 2의 배수가 아니라고 가정합니다.
--------------------<입출력 예시>----------------------

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

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

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

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

output = makeMultiplesOfDigit2(2, 2);
console.log(output); // --> 1
----------------------------------------------------
function makeMultiplesOfDigit2(num1, num2) {
   // num1과 num2 사이에서 반복문을 돌려서 --> 시작용, 끝용 변수 선언
   // 그 사이에 2의 배수가 몇개나 있는지 확인한다--->카운트 용 변수 선언  
  let count = 0;          
  let start = num1;  
  let end = num2;

  if (num1 > num2) {  //  point 1 : 만약 num1이 num2보다 크다면? 
    start = num2;               //  start와 end바꿔주기
    end = num1;
  }

  if (start === 0) {  //  point 2 : start가 0인 경우에는 start를 1로 재할당(주의사항참고)
    start = 1;
  }
 
  for (let i = start; i <= end; i++) {    //  start부터 end까지 돌리자
    if (i % 2 === 0) {
      count += 1;
    }
  }

  return count;
}

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

<힌트>
자바스크립트 내장 객체인 Math를 활용해 불필요한 연산을 줄일 수 있습니다. (javascript square root 또는 자바스크립트 제곱근)

 // 약수의 개수가 2개뿐인 수 : 1과 자기자신만이 약수인 수
 // Math.sqrt() : Math.sqrt(9); -- 3 ///  Math.sqrt(2);-- 1.414213562373095  ---> parseInt 이용 정수만들어야겠다
 // 그래서 sqrt라는 변수선언하고 시작
 // 1은 소수가 아니다 :if num === 1 이면 false; 먼저 처리
 // 짝수는 소수가 아니다 but 2는 예외, if num === 2 면 true / num%2 ===0 이면 false;

 // for문으로 체크- i = 3부터 시작/ 제곱근 sqrt까지 체크/ 2씩 증감 
 // 홀수만 나옴->  ~ N제곱근까지 나눠본 후 하나라도 나눠떨어지는 것이 존재하면 false
 // num % i === 0 으로 false 값부터 빼내고
 // 나머지 true -> N제곱근까지 나눴음에도 나눠떨어지지 않는 경우 소수

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;
}

18_listPrimes

수를 입력받아 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'

<힌트>------------------------------------------------------
반복문의 break 문에 대해서 학습합니다. (javascript loop break)

function listPrimes(num) {   // 1. 2가 기본 시작 수 ... 일단 변수 result에 2를 할당해 쌓아나가야겠다.->결과값으로 변수 result를 리턴할수 있게끔

  let result = '2'         // 2. 2는 어차피 받으니까, for문의 초기화는 i= 3부터 시작
                          // num의 숫자 까지만 확인(이하)/ 2씩 증

  for(let i= 3; i <= num; i += 2;){     // 3. true - false값 따라 결과 내기 위한 변수 만들어줌(true 디폴트) 
                                        // parseInt(Math.sqrt(i)) 활용 거듭제곱근 구한수를 정수로 바꿔줌
  
  let judge === true;
  let sqrt = parseInt(Math.sqrt(i));
 
     for (let j =3; j <= sqrt; j += 2;){    // 4. 3이상 홀수들이 쌓이게 됨-> 그 숫자들을 for 문 안에 넣어 i마다 하나하나 확인
                                            //-> j = 3부터시작/ i의 거듭제곱근 까지만->i 2씩 증 
    
        if (i % j === 0) {       //5. i % j 해줘서 딱떨어지면 소수 아니므로 false값 줌, break로 내보냄
           judge === false;
           break;
          }
        }   
  
      if (judge) {        //6. 밖 for안에 true여야만 통과하는 조건문 만듬 result-``이용 문자열만듬 
          result = `${result} - ${i}`;
      } 
   }
  return result; 
 }   


}

<Using indexOf() to count occurrences of a letter in a string> - while , str.indexOf() 이용

ex) 'e'의 존재, 수 찾기
const str = 'To be, or not to be, that is the question.'
  let count = 0
  let position = str.indexOf('e')

  while (position !== -1) {
  count++
  position = str.indexOf('e', position + 1)
  }

console.log(count) // displays 4
profile
Creative Developer

0개의 댓글