바닐라코딩 Starter Kit - STEP 2 - Programming with JavaScript Part 3

roadzmoon76·2022년 2월 2일
0

📝 켄을 찾아라

  • index 메소드 같은 걸 사용하지 않고, forif 로만 구현
function findKen(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === "Ken") {
      return `켄은 ${i}에 있다`;
    }
  }
}
  • 처음에 실수로 if 조건문에 arr[i] = 'Ken' 이라고 넣어서 정상 작동이 안됐다. 이 실수를 은근히 자주 한다 조심하자

📝 바코바코바코바

function repeatVaco(n) {
  let result = '';
  if (n%2) {
    result += '바'
    for (let i = 1; i <= (n-1)/2; i++) {
      result += '코바';
    }
    return result;
  }
  for (let i=1; i<= n/2; i++) {
    result += '바코';
  }
  return result;
}
  • 처음에 홀수일때 '코바' 를 더하는 실수를 했다
  • for 조건문에 )를 하나 더 끼어서 정상적인 실행이 안되는 실수를 했다

📝 가장 작은 수

function findMinNumber(arr) {
    let minNum = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] < minNum) {
            minNum = arr[i];
        }
    }
    return minNum;
}

📝 묻고 더블로

  • 먼저 최근에 공부했던 나머지 매개변수를 사용해서 해봤다
function doubleArray(arr) {
    return [...arr, ...arr];
}
  • 나머지 매개변수나 메소드에 대해 하나도 몰랐다면?
    • 처음에 잘못 짠 코드(무한로딩)
      function doubleArray(arr) {
        for (let i = 0; i < arr.length; i++) {
            arr[i+arr.length] = arr[i];
        }
        return arr;
      }
    • 수정한 코드(무한로딩)
      function doubleArray(arr) {
        let newArr = arr;
        for (let i = 0; i < arr.length; i++) {
            newArr[i+arr.length] = arr[i];
        }
        return newArr;
      }
      • 첫번째 코드에서 arr.length가 계속 증가해서 무한로딩이 걸리는것같아 수정한 코드에서는 arr.length가 더이상 늘어나지 않도록 새로운 변수를 선언했는데도 똑같이 무한 로딩이 걸렸다 ㅠ
        • 생각해보니 객체는 깊은복사를 하지않으면 데이터가 있는 주소값만 복사하기에 결국 newArr의 값이 변하면서 arr값도 변해서 수정한 코드도 무한 로딩이 생긴것같았다.

          단순 주소복사

          for 문은 통한 깊은복사
    • 깊은 복사를 이용한 수정
      function doubleArray(arr) {
      let newArr = [];
      for (let i = 0; i < arr.length; i++) {
          newArr[i] = arr[i];
          newArr[i + arr.length] = arr[i];
      }
      return newArr;
      }
      • for문을 통해 newArr와 arr가 서로 다른 주소를 바라보게 해줬더니 정상적인 결과가 나왔다

📝 숫자 쪼개기

  • 형변환 함수나 메소드를 사용하지 않고 해봄
function splitNumber(num) {
    let arr = [];
    let cipher = 1;
    for (let i = 1; num % 10 ** i !== num; i++) {
        cipher = i + 1;
    }
    for (let i = 0; i < cipher; i++) {
        arr[i] = (num - num % 10 ** (cipher - (i + 1))) / 10 ** (cipher - (i + 1));
        num = num % 10 ** (cipher - (i + 1));
    }
    return arr;
}
  1. arr 메소드를 사용 안하므로 해당 인덱스에 값을 할당해주는 방식으로 for문을 쓰려함
  2. 그러기위해선 먼저 자릿수가 필요해서 자릿수 변수를 먼저 선언하고 할당해줌
  3. 각 자리 숫자를 얻기위해 10의 거듭제곱으로 나눈 몫이 필요했는데 자바스크립트에는 나머지를 구하는 % 연산자 뿐이라, 먼저 그 나머지를 구해 원래 수에서 빼준후 다시 10의 거듭제곱으로 나눠 몫을 구했음
  • 처음에 자릿수 구하는 식을 착각을 해서 false가 나올때의 i를 cipher에 할당해놨는데 생각해보니 for문은 2번 루트가 false가 나면 3번루트가 아예 안돌았음. 그래서 false가 나면 그 전 루프때의 i값에 +1한게 자릿수가 되므로 코드를 수정해줌

📝 객체 만들기

  • 처음에 잘못 짠 오류난 코드
function createArray(arr1, arr2) {
    let newObj = {};
    for (let i = 0; i < arr1.length; i++) {
        newObj.arr1[i] = arr2[i];
    }
    return newObj;
  }

  • 객체에 키와 밸류를 추가하는 방법은 두가지 obj.aobj['a'] 가 있는데 객체에서 불러온 요소가 스트링값이였는데 두번째 방법이 아닌 첫번째 방법을 써서 마치 obj.'a' 이런식으로 적용이 된거라 오류가 난거 같았다
  • 수정한 코드
function createArray(arr1, arr2) {
    let newObj = {};
    for (let i = 0; i < arr1.length; i++) {
        newObj[arr1[i]] = arr2[i];
    }
    return newObj;
  }
profile
크론병걸린 자퇴생, 개발자되기

3개의 댓글

comment-user-thumbnail
2023년 2월 9일

안녕하세요. 코딩공부하는 학생인데 블로그 보면서 공부하고 있습니다.
혹시 괜찮으시다면 질문을 해도 될까요?
바코바코바 문제에서

function repeatVaco(n) {
let result = '';
if (n%2) {
result += '바'
for (let i = 1; i <= (n-1)/2; i++) {
result += '코바';
}
return result;
}
for (let i=1; i<= n/2; i++) { // 여기서부터는 if 절에서 false일 때 실현되는 코드인가요? 혹시 else없이도 사용할 수 있나요?
result += '바코';
}
return result;
}

1개의 답글