Code Kata #12 배열

💁 문제분석

주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.
(새로운 배열을 생성해서는 안 됩니다.)
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

문제가 간단하다고 생각했다...쥬륵
for문으로 돌려서 배열의 요소가 0이면 splice로 없애주고 push로 배열의 마지막에 0을 추가하면 되겠다고 생각했다!

🙈 나의 코드

const moveZeroes = nums => {
  for(i=0;i<nums.length;i++){

    if(nums[i] === 0){

      nums.splice(i,1);
      nums.push(0)
    }

  }
  return nums
}

그런데 이렇게 하면 for문이 돌면서 배열 요소의 첫번째 값을 검사하고 바로 두번째 요소를 검사하기 때문에 재배열된 배열의 첫번째 요소가 0일 경우 0을 마지막에 푸시하지 못하게 된다. 그래서 for문을 돌때 강제로 첫번째에 0이 들어있지 않은지 확인을 해주는 장치가 필요하다.

종민님의 코드

const moveZeroes = nums => {
   let m = 0
  for(i=0;i<nums.length;i++){
    console.log(i)
    if(nums[i-m] === 0){
      console.log(nums)
      nums.splice(i-m,1);
      nums.push(0)
      m++
    }

  }
  return nums
}

그래서 m을 0으로 설정하고 i에서 m을 빼주면서 강제로 앞에 있는 요소부터 for문이 돌도록 해야한다.
설명하기가 어려운데 손코딩을 해보면 바로 이해가 된다!

오늘의 코드카타는 신박했당!

좋은 웹페이지 즐겨찾기