변수 정리
조건문
문자열
반복문
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