factorial
문제 : 수를 입력받아 factorial(n) 값을 리턴하기 / 1*2*3*4...*num
for문 이용하기
↓↓↓↓↓↓↓드래그해야 보입니다.
function factorial(num) {
let result = 1; <---1의값선언하기
for (let i = 1; i <= num; i++) { <--------for문의 초기화, 조건문, 증강문 설정하기
result = result * i; <-----구현문 설정하기
}
return result;
}
repeatString
문제: 문자열과 수를 입력받아 반복된 문자열을 리턴하기
// str이 빈칸일땐 빈문자열 리턴
↓↓↓↓↓↓↓드래그해야 보입니다.
function repeatString(str, num) {
let result = ''; <---문자열 만들기 위해 result는 선언
if (str === '') { <---str이 빈칸일때, 리턴도 빈 문자열
return '';
}
for (let i = 0; i < num; i++) { <--num의 숫자만큼 반복하기 위한 조건문
result = result + str; <-----str을 반복하는 구현문
}
return result; }
makeDigits2
문제:수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열을 리턴하기
// for문 말고 while문 사용하기
//숫자 사이를 '-'로 구분하기 ('1-2-3-4-5-6-7')
// 숫자를 받아서 string으로 리턴
function makeDigits2(num) {
let result = '1';
let i = 2; <---while문은 구조가 다르다. 여기가 초기화
while (i <= num) { <---여기는 조건문
result = result + `-${i}`; <---여기는 구현문
i++; <---여기는 증감문이다.
}
return result;
}
//while문과 for문의 구조의 차이 알기
// '${}'구조 익숙해지기
//1부터 시작하고 반복하는 구조이기에 result값에 1 문자열이 들어가야한다.
makeOddDigits
문제:수(num)를 입력받아 1을 포함하여 num개의 홀수로 구성된 문자열을 리턴하기
//반복문(while)문을 사용
//숫자(number string) 사이의 구분은 없음 ('13579')
function makeOddDigits(num) {
let result = '';
let count = 0;
let i = 1;
while (count < num) {
result = result + String(i);
i = i + 2;
count++;
}
return result; }
// 자릿수인 count와 자리마다 들어갈 숫자인 i 로 두개의 구현문을 가진다.
replaceAll
문제: 문자열과 두 개의 문자(from, to)를 입력받아, 문자열에 등장하는 특정 문자(from)가 다른 문자(to)로 바뀐 문자열을 리턴하기
//from.length는 1 // to.length는 1
string 타입을 리턴해야 합니다.
function replaceAll(str, from, to) {
let result = '';
for (let i = 0; i < str.length; i++) {
if (str[i] === from) {
result = result + to;
} else {
result = result + str[i];
}
}
return result;
}
// str의 i번째있는 문자가 from과 같다면 그자리를 to로 바꿔줘여한다.
// 같지않다면 원래의 위치에 리턴한다.
computePower
문제:밑(num1)과 지수(num2)를 입력받아 밑의 거듭제곱을 리턴하기
//number 타입을 리턴해야 합니다.
//Math.pow, 거듭제곱 연산자 사용은 금지
function computePower(num1, num2) {
let result = 1;
for (let i = 0; i < num2; i++) {
result = result * num1;
} return result;
}
// num2 만큼 반복해야하기 때문에 조건문에서 num2 보다 커지면 안된다.(0부터 시작)
// (2,3)이라먄 result = result * num1 --> 첫번째) 1*2 두번째 1*2*2 세번째 1*2*2*2
getSumOfFactors
문제:수를 입력받아 약수(factor)의 합을 리턴하기
약수란? 몫이 자연수이고 나머지가 0이 될때 나누는 수
function getSumOfFactors(num) {
let result = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
result = result + i;
}
}
return result; }
//getSumOfFactors(7) = 7 (1+2+4)
//getSumOfFactors(8) = 15 (1+2+4+8)
isPrime
문제:수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다.
//number 타입의 수
//boolean 타입을 리턴해야 합니다.
//0,1,2는 소수가 아님,
//2로나눠지는 수는 소수가 아님
//자신과 1을 제외하고 나눠지는 수는 소수가 아니여서 조건식에는 '<'부호만, 초기화에는 2으로 시작
//자신의 숫자 전까지 반복하여 나눠지면 false, 아니면 true
function isPrime(num) {
let sqrt = parseInt(Math.sqrt(num));
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; }
//숫자가 2면 true
// 2로나눠지면 false(그럼 약수다)
// 2까지 언급했기에 초기화는 3으로 선언
// Math.sqrt는 제곱근을 구해줌( 제곱근에서 소수가 되는지 봐야함)
//제곱근까지 반복되기전에 나누어지면 약수라 볼수있음 그럼 false
makePermutations
문제: 문자열을 입력받아 해당 문자열에 등장하는 각 문자(letter)를 가지고 만들 수 있는 길이 2의 문자열들을 리턴하기
//입력받은 문자열의 각 문자를 0, 1, 2, …, n이라고 할 경우, 00,01,02,…,nn 형식으로 리턴해야 합니다.
//이중 반복문(double for loop)을 사용해야 합니다.
//빈 문자열을 입력받은 경우에는 빈 문자열을 리턴해야 합니다.
function makePermutations(str) {
let result = '';
for (let i= 0; i< str.length; i++) {
for (let j= 0; j< str.length; j++) {
result = result + `${str[i]}${str[j]},`;
}
}
return result.slice(0, result.length - 1);
}
// i는 첫번째자리, j는 두번째 자리라고 본다면
// 만약 str=123 이면 '11,12,13,21,22,23,31,32,33,' 이 되고
//마지막 ',' 하나를 지워주기위해 slice함수를 사용하여 지워준다.
//젤어려웠슴
makeMarginalString
문제: 문자열을 입력받아 해당 문자열을 처음부터 한 글자(letter)씩 다시 작성한다. 이 때, 한 글자를 추가할 떄마다 부분적으로 완성된 문자열을 전부 이어붙인 문자열을 리턴하기
//이중 반복문을 사용해야합니다.
//str.slice, str.substr, str.substring사용은 금지됩니다.
//빈 문자열을 입력받은 경우에는 빈 문자열을 리턴해야 합니다.
function makeMarginalString(str) {
let result = '';
for (let i = 0; i < str.length; i++) {
for (let j = 0; j <= i; j += 1) {
result = result + str[j];
}
}
return result; }
// j의 0번째 문자부터 입력 후, 그 다음 문자 또한 0번째부터 다시 입력해줘야 하기 떄문에 j<= i를 반복조건으로 만들어주어야 한다.
// 예시를 들면 str이 'abc' 이라면
// i가 0이고 j도 0일 때, 'a'를 출력 후 j++를 해준다.
// j가 1이 되도 i가 0이기에 false가 되고 다시돌아 i는 1이된다.
// i=1, j=0일때와 i=1, j=1 일때 두번 반복되어 'aab'가 된다.
// j가 2이 되도 i가 1이기에 false가 되고 다시돌아 i는 2이된다.
// i=2, j=0일때와 i=1, j=1 일때, i=2, j=2일 때 세번 반복되어 'aababc'가 된다.
//str.length는 3이기에 i는 3을 넘을수 없다. 반복 끝
'개발 공부 > 웹개발' 카테고리의 다른 글
HTML 필수 태그 정리(1)_제목_문단_강조_링크_이미지 태그_Heading, paragraph, anchor, image, emphasis, breakline (0) | 2021.04.21 |
---|---|
변수, 데이터, 변수 선언, 데이터할당, 자료형 (1) | 2021.04.21 |
문자열_문제풀이(javascript) (2) | 2021.04.20 |
조건문_문제풀이 (0) | 2021.04.19 |
변수_문제풀이(javascript 자바스크립트) (2) | 2021.04.19 |
댓글