1016 TlL (Replit 문제풀기)

기멜·2021년 10월 16일
0

알고리즘

목록 보기
3/4

문제 중에서 잘 모르는 것 같은 문제 뽑아서 코드리뷰

Iterate Odd Numbers With a For Loop 1

for문에서 i가 2씩 증가한다면 어떨까요?
지난 시간에 for문에서 i가 1씩 증가하는 방식에 대해 알아 보았는데요!
이번 시간에는 응용편입니다.
왼쪽에 두 개의 함수식이 있습니다.
각 함수식에 원하는 결과값이 나올 수 있도록 for문을 작성해주세요!
1~30까지의 숫자 중에 addEvenNumber 함수는 짝수만을 result 배열에 담아 리턴하고,
addOddNumber 함수는 홀수만을 result 배열에 담아 리턴합니다.
i가 2씩 증가하도록 증감식을 잘 설정해주세요!
Hint!
초기화문에서 index가 어떤 숫자부터 시작하는지가 중요합니다.

function addEvenNumber() {
  let result = [];
  for(let i=1; i<16; i++){
    result.push(i*2)
    }
  return result}
console.log(addEvenNumber())

function addOddNumber() {
  let result = [];
  // 여기에 식을 작성해주세요!
  // result 배열안에 홀수가 들어가야 합니다.
  for(let i = 1; i <= 30; i+=2){
    result.push(i)
  }
  return result
}
console.log(addOddNumber())

코드리뷰:
일단은 let result = []; 로 빈 배열을 만들어 줍니다.
그 다음 for(let i=1; i<16; i++) 로 i는 1부터 15까지 i++ 1개씩 증가하는 for문을 만들어줍니다.
그다음 result.push(i * 2)로 i x 2라고 해주면 이제 i가 1일 때 2를 곱해서 2가 될테고 이걸 15 x 2 = 30이라는 짝수들로만 이루어지는 배열을 만드는 함수가 됩니다.
홀수만 뽑는 방법은 for(let i = 1; i <= 30; i+=2) 그냥 이렇게 1에서 30까지 중에 i = + 2 를 줄여서 i+=2로 할 수 있다.
더하기 할당 연산자(+=)는 오른쪽 피연산자의 값을 변수에 더한 결과를 다시 변수에 할당합니다. 한마디로 오른쪽 값을 왼쪽에 더해주는 값이라는 겁니다.
그래서 i가 일단 1이 나오고, 1에 2를 더해서 3이 나오고, 3에서 2를 더해서 5가 나오고 ~ 계속 2씩 더해져서 나중에 29까지 홀수들이 나오는 것을 알 수 있습니다.

[for문] 6. Iterate Through an Array with a For Loop

function arrayLoop() {
  // 아래의 코드를 수정하지 마세요.
  let myArr = [2, 3, 4, 5, 6];

  // 아래에 코드를 작성해주세요
  let total = 0;
  for(let i = 0; i < myArr.length; i++) {
    total = total + myArr[i];//2와 0, 3과 1 ~ 이런 식으로 나오는 것
    // total이 0 이고 myArr[i]에 2,3,4,5,6이 나오고 total에 더한 값이 차례대로 들어가서 더해진다. 
  } 
  
  // 아래의 코드를 수정하지 마세요.
  return total;
}
console.log(arrayLoop()) // 2+3+4+5+6 = 20 이 나오는 것

코드리뷰:
일단 let myArr = [2, 3, 4, 5, 6]; 이 주어진다.
그 다음 for(let i = 0; i < myArr.length; i++)식을 보면 i는 0이고 myArr.length보다 적으니까 myArr.length는 5니까 i는 0,1,2,3,4 다.
그리고 i++니까 0~4까지 하나씩 늘어난다. 그리고
total = total + myArr[i]; 일단 처음엔 total에 myArr[i]인 2,3,4,5,6이 차례대로 더해지면서 처음에 total에 [i]가 0 일때 0 + 2래서 2가 total에 들어가고, [i]에 1이 오면 3이 들어간다 그래서 더하기 되서 5가 나오고 이런식으로 뒤에오는 숫자들이 전부 더해지게 되서 최종적으로 20이 나오게 됩니다.

getAllLetters

for문을 사용하여 getAllLetters 함수를 작성하세요.
단어(str 인자)가 주어졌을 때 함수의 리턴값은 주어진 단어를 구성하는 모든 문자를 담고 있는 배열입니다.
만약 빈 문자열이 주어졌다면, 빈 배열을 반환해야 합니다.

let output = getAllLetters('Radagast');

function getAllLetters(str) {
  // 아래의 코드를 수정하지 마세요.
  let strArray = [];

  // 아래에 코드를 작성해주세요
  for(let i = 0; i< str.length; i++){
    strArray.push(str.substr(i,1)) //str.substr(시작 인덱스,추출 갯수)
  }
  
  // 아래의 코드를 수정하지 마세요.
  return strArray;
}
console.log(output)

코드리뷰:
for(let i = 0; i< str.length; i++) 로 i< str.length 은 8이고 i는 7입니다. 그래서 7번 돌 동안
str.substr(i,1) 로 인해서 str.substr(시작 인덱스,추출 갯수)로 글자를 하나씩 추출을 합니다.
['R', 'a', 'd', 'a', 'g', 'a', 's', 't']
가 나옵니다.

심화 - 인사봇

  • helloBot이라는 함수를 만들어주세요.
  • for문을 사용하여 빈 result배열에 greetings에 들어있는 인삿말을 채워주세요.
  • 인자에는 0과 1로 이루어진 배열이 들어갑니다.
let group1 = [0,1,1,0,0] //이게 people 

const helloBot = people => {
  let result = [];

  for (let i = 0; i < people.length; i++){ // 5고 i는 0,1,2,3,4
    if(people[i] === 1){ // people[i]를 해서 0,1,1,0,0이 온다.
      result.push('또 만나네요')
      }else{
        result.push('안녕하세요')
      }
    }
    return result
  }
  // return people.map(p => p === 1 ? '또 만나네요' : '안녕하세요')
  //map()은 배열로 반환해줌 따로 push를 해줄 필요가 없다.
}

코드리뷰:
일단 const helloBot = people => 여기에 있는 people은 [0,1,1,0,0] 입니다.
for (let i = 0; i < people.length; i++)에서
people.length 는 5 이고 i 는 0,1,2,3,4 입니다.
if(people[i] === 1) 에서 people은 0,1,1,0,0이고 [i]는 0,1,2,3,4 니까 처음 0은 1과 맞지 않으니까 else에 있는 false값인 '안녕하세요'를 반환하고, 다음에 1은 다음[i] = 1이니까 if 인 true값인 '또 만나네요' 를 보이는 것이다. 결론적으로는
['안녕하세요','또 만나네요','또 만나네요','안녕하세요','안녕하세요'] 를 내보인다.

profile
프론트엔드 개발자를 꿈꾸는 도화지 위를 달리는 여자

0개의 댓글