CodeKata | Week 3 Day 4

Ssss·2021년 2월 21일
0

문제

주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요.
원래 있던 숫자의 순서는 바꾸지 말아주세요.

(새로운 배열을 생성해서는 안 됩니다.)

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

첫 접근

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

응 안돼 ,,,, 돌아가,,,,
배열안에 0이 하나인경우는 가능하지만 0이 뜨는 순간 끝나버려서 0이 두개이상일 경우 for-loop이 안돈다......

두번째 접근

const moveZeroes = nums => {
newArr =[]
trashArr =[]
for(i=0; i<nums.length;i++) {
  if(nums[i] !== 0) {
    newArr.push(nums[i])
  } else (trashArr.push(nums[i]))
} 
for(i=0; i<trashArr.length;i++){
  newArr.push(0)
} 
return newArr
};

ㅎㅎ..누가봐도 메모리낭비 시간낭비 쓸데없이 긴 코드 ... 분명 더 짧게 할수 있는 방법이 있을텐데 일단 해봤다 ... 배열을 쭉 돌면서 0이면 trashArr에 넣고, 0이 아니면 newArr에 넣고 나중에 newArr에 trashArr.length만큼 0을 집어넣어버렸다..결과는 🙌 통과 🙌

암튼 통과하긴했는데 이건 아니다 싶어서 구글선생님에게 도움을 요청하여 다른 사람들의 접근 방식을 찾아보았다.

세번째 접근

const moveZeroes = nums => {
  for(i = nums.length-1; i >= 0; i--){
    if(nums[i]===0){
      nums.push(nums.splice(i, 1)[0]);
    }
  }
  return nums
};

하...뒤에서 부터 돌리면 되는구나.....i=0부터 돌려야한다는 편견을 아직도 버리지 못해서 여기까지 생각을 못했다....😭😭

profile
Front-end Developer 👩‍💻

0개의 댓글