
수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열 리턴
while)문 사용for문 사용은 금지'-'로 구분('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문을 없애고 싶다.
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 함수 종료
수를 입력받아 1부터 해당 수까지의 수 중에서 3의 배수로만 구성된 문자열 리턴
for)문 사용'3691215')function makeMultiplesOfDigit(num) {
let result = "";
for(let i=1; i<=num;i++){
if(i % 3 === 0){
result = result + String(i);
}
}
return result;
}
function makeMultiplesOfDigit(num) {
let result = '';
for (let i = 3; i <= num; i += 3) {
result = result + String(i);
}
return result;
}
✅ for문 자체를 3의 배수로만 돌리도록 조건식 설정
두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴
for)문 사용num1이 num2보다 작지 않을 수도 있음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;
}
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로 바꿔주면 간단해짐
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값 할당
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;
}