반복문 세번째 데이트

야 나 개 ·2021년 10월 10일
0
post-thumbnail

세번째 데이트하면 왠만하면 각 나오지 않나??
여기서 그만 둘지 삼귈지 사귈지.. 오잉 여러분도 이번에 한번 정해보세요

그럼 렛츠기릿 ~~~

8번 반복문 문제

수(num)를 입력받아 1을 포함하여 num개의 홀수로 구성된 문자열을 리턴해야 합니다.

주의 사항
반복문(while)문을 사용해야 합니다.
숫자(number string) 사이의 구분은 없습니다. ('13579')

function makeOddDigits(num) {
  // TODO: 여기에 코드를 작성합니다.
  // 결과값 나타낼 변수 선언 하고 빈문자열 할당  
  let result = '';

  // 반복문 시작 1부터 갯수는 입력된 숫자 만큼 
  let i = 1 
  while (i <= num){
    if (i%2 !== 0){
      result = result + String(i);
    }
    i++
  } return result;
}

// 이렇게 되면 입력된 수까지만 된다. ㅇㅋ? 입력된 수가 갯수가 아니다.

입력된 수가 갯수로 바꿔줘야하는 아주 좋은 문제 이다.

이 개념을 잘 알고 있어야 한다.

입력된것을 반복하는 횟수에만 이용해야한다. ㅇㅋ?

정답 코드 ~~ 쏜다

function makeOddDigits(num) {
  // TODO: 여기에 코드를 작성합니다.
  let result = '1'; // 정답으로 들어갈 변수 result 선언 하고 문자열 1 할당 
  let i = 1; // 반복문 초기 값
  let n = 1; // 결과값으로 넣을 변수 
  while(i<=num-1){ // 반복문은 i가 입력된 수보다 1작은 수까지만 반복 후 아웃
    n+=2; // 결과값에 2씩 더해준다. (ex. 1+3+5)
    result=result+String(n);
    i++ 
  }
  return result;
}

살짝 꼬인문제인데. 응용력이 폭팔해야함
i 뿐만 아니라 다른 변수도 활용 해야한다. 자유자재로

9번 문제

수를 입력받아 1부터 해당 수까지의 수 중에서 3의 배수로만 구성된 문자열을 리턴해야 합니다.
주의 사항
반복문(for)문을 사용해야 합니다.
숫자(number string) 사이의 구분은 없습니다. ('3691215')
3의 배수가 없을 경우, 빈 문자열을 리턴해야 합니다.

function makeMultiplesOfDigit(num) {
  // TODO: 여기에 코드를 작성합니다.

  let result = '';
  for (let i=1; i<=num; i++){
    if(i%3 === 0){
      result = result + String(i);
    }
  }return result;

}

간단하게 3의 배수가 나올때만 결과값에 더해주세요 ~~
계속 i를 1씩 더하는 방법만 사용했는데(사실 대중적임) 하지만 i++틀에서 벗어나보겠다.

function makeMultiplesOfDigit(num) {
  // TODO: 여기에 코드를 작성합니다.
  let result = '';
  for (let i=3; i<=num; i+=3){  
      result = result + String(i);
  }return result;

}

처음부터 3으로 시작해서 아예 3씩 더해주겠다.. 이러면 조건문도 안쓴다 오예

10번문제..

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

주의 사항
반복문(for)문을 사용해야 합니다.
num1이 num2보다 작지 않을 수도 있습니다.
0은 2의 배수가 아니라고 가정합니다.

첫번째 문제 풀이.

포인트는 조건문 + 반복문 + 조건문 + 조건문 넣기
(완전 변태스러운 코딩임 ㅋㅋㅋㅋㅋㅋ재미있당 ㅋㅋㅋ)

안될줄 알았는데..잘된다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ흐흐 짜는데 30분 넘게 걸림

중간에 continue가 들어간다 만약 i가 0일경우는 제외하고 반복해주삼 ㅋㅋㅋㅋ 이라는 뜻이다. ㅋㅋㅋ

이래서 정말 꾸역꾸역 코딩 짠 느낌이다. ㅋㅋㅋ(예시를 만들력고 얼마나 노력중인지.. 다들 별풍좀 쏴줘.. )

해석은 주석으로 넣어놓겠다.

function makeMultiplesOfDigit2(num1, num2) {
  // TODO: 여기에 코드를 작성합니다.
  if (num1 ===0 && num2 === 0){ // 입력된 두수가 모두 0일 경우를 엣지케이스로 제거 
    return 0;
  }
  let result = 0;   // 결과값 리턴할 변수 선언 
  if(num1<num2){ // num1<num2 경우 
  for (let i=num1; i<=num2; i++){
    if (i%2 === 0){  // 2로 나눴을때 나머지가 0인경우만 나타내주세요.
      if(i === 0) continue;  // 0인경우는 제외해주세요.
      result++  // result = result + 1 이라는 뜻이다.
    }
  } return result;
  }
  else if (num1 > num2){  // 반대인 경우 나타냈다.
    for (let j=num2; j<=num1; j++){
    if (j%2 === 0){
      if(j === 0) continue;
      result++
    }
  } return result;
  } else return 1; // 이 외 조건은 1로 리턴하겠다.
  
}

두번째 문제 풀이

(좀 코더스럽게 짜겠다.)

function makeMultiplesOfDigit2(num1, num2) {
  // TODO: 여기에 코드를 작성합니다.
  let count = 0;
  let start = num1;
  let end = num2;
  
  if (num1 > num2){
   start = num2;
    end = num1;
  }
  
  for(let i = start; i <= end; i++){
    if(i%2 === 0){
      count = count + 1;
    }
  }return count;
}
// 0을 제외 시키는 방법이 뭐가 있을까. 이렇게 입력하면 0이 포함되어 있을때 자꾸 횟수에 더해진다.
function makeMultiplesOfDigit2(num1, num2) {
  // TODO: 여기에 코드를 작성합니다.
  let count = 0;        // 결과값을 나타낼 변수선언 
  let start = num1;    // 직관적으로 알아보기 위해 시작점 
  let end = num2;      // 끝나는 수 변수로 선언 

  if (num1 > num2){     // 만약 num1 > num2 크면 위치 바꾸는 스킬
    start = num2; 
    end = num1;
  }
  if (start === 0){     // 만약에 0이면 ...1부터 시작하자 
    start = 1;
  }
  
  for (let i = start; i <= end; i++){
    if (i%2 === 0){
      count++;
    }
  } return count;
}

11번 문제

문자열과 문자를 입력받아 문자열에서 문자(letter)가 등장하는 횟수를 리턴해야 합니다.

function countCharacter(str, letter) {
  // TODO: 여기에 코드를 작성합니다.
  let count = 0;
  for(let i=0; i<=str.length; i++){
    if(str[i] === letter){
      count++
    }
  }return count;
}

형들 이건 살짝 쉽다 그치?
설명 생략할께.~~

12번 문제

숫자 문자열을 입력받아 문자열을 구성하는 각 숫자 중 가장 큰 수를 나타내는 숫자를 리턴해야 합니다.

주의 사항
반복문(for)문을 사용해야 합니다.
str.split 사용은 금지됩니다.
빈 문자열을 입력받은 경우, 0을 리턴해야 합니다.

첫번째 문제풀이

function getMaxNumberFromString(str) {
  // TODO: 여기에 코드를 작성합니다.
  // 가장 큰 숫자를 찾기 위해선 기준이 필요하다. 
  // 엣지케이스인 빈문자열은 미리 뺴준다.
  if (str.length === 0){
    return '0';
  }

  let result = '';
  for (let i=1; i<=str.length; i++){
    if (str[i-1] < str[i]){
      result = str[i];
    }
  } return result;
}

두번째 문제풀이

문자열을 숫자로 바꿔주는 메소드를 이용해보겠습니다.

parseInt(string, 진법수) -> 문자열을 정수로 바꾸는 함수
parseFloat() -> 문자열을 실수로 바꾸는 함수

사용해서 풀어보겠습니다.~~

 function getMaxNumberFromString(str) {
   let result = 0
   for (let i=0; i<str.length; i++){  
     if ( parseInt(str[i]) > result){ // 문자열인 숫자를 정수로 바꿔주지
       result = parseInt(str[i]); 
     }
   }return String(result); // 마무리로 문자열 리턴
 }

13번 문제

문자열과 두 개의 문자(from, to)를 입력받아, 문자열에 등장하는 특정 문자(from)가 다른 문자(to)로 바뀐 문자열을 리턴해야 합니다.

잘못된 코드 찾기!! 시작~~

function replaceAll(str, from, to) {
  // TODO: 여기에 코드를 작성합니다.
  let result = '';
  for(let i = 0; i <= str.length; i++){  // 반복 횟수 지정을 잘해야한. 문자열은 0번째부터 시작하기 때문에 마지막은...우리가 생각하는것보다 하나 작게 ㅇㅋ?
    if(str[i] !== from ){
      result = result + str[i];
    }else if (str[i] === from){ 
      result = result + to
    }
  }return result;
}

그래서 정답코드

function replaceAll(str, from, to) {
  // TODO: 여기에 코드를 작성합니다.
  // 문자열을 하나씩 검색하다가 같은 문자가 나올시 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;
}

문자열은 배열과 다르게 바로 변경이 안됨. 그러니까 문자열을 하나 하나 다시 반복해서 다시 만들어야함

14번 문제

문자열을 입력받아 각 문자(letter) 뒤에 해당 문자의 인덱스가 추가된 문자열을 리턴해야 합니다.

function characterAndNumber(word) {
  // TODO: 여기에 코드를 작성합니다.
  let result = '';
  for(let i = 0; i<word.length; i++){
    result = result + word[i] + i
  }
  return result;
}

뭐 간단하쥬??!!

15번문제

밑(base)과 지수(exponent)를 입력받아 밑의 거듭제곱을 리턴해야 합니다.

function computePower(base, exponent) {
  // TODO: 여기에 코드를 작성합니다.
  let result = 1;
  for(let i=1; i<=exponent; i++){
    result = result*base
  } return result;
}

형들 잠심 쉬어가는 문제를 풀어봤어 ~~ 자신감 좀 올라갔어??

16번 문제

수를 입력받아 약수(factor)의 합을 리턴해야 합니다.

function getSumOfFactors(num) {
  // TODO: 여기에 코드를 작성합니다.
  // 약수를 나타낼 식을 보여줘야함. 
  let result = 0;
  for(let i=1; i<=num; i++){
    if(num%i === 0){ // 1부터 정수로 나눴을때 나머지가 0인경우가 약수 이다. 
      result = result + i // 약수로 된 i를 모아서 더하자 
    }
  }return result;
}

형님들 자신감 +5 된분들만 다음 데이트때 보자 ~~

다음엔 소수구하기랑 이중반복문 할꺼야

담에 보장

profile
야 나도 개발자 될 수 있어

0개의 댓글