본문 바로가기
개발 공부/웹개발

반복문_문제풀이(java script)

by 크롱이크 2021. 4. 20.

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.length1  // to.length1

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

 

// j0번째 문자부터 입력 후, 그 다음 문자 또한 0번째부터 다시 입력해줘야 하기 떄문에 j<= i를 반복조건으로 만들어주어야 한다.

// 예시를 들면 str이 'abc' 이라면 

// i0이고 j0일 때, '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을 넘을수 없다. 반복 끝

 

반응형

댓글