[리트코드] 283. Move Zeroes




283. Move Zeroes

리트코드

나의 풀이 (처음 접근 > error)

var moveZeroes = function (nums) {
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] === 0) {
      let temp = nums.splice(i, 1);
      nums.push(temp[0]);
    }
  }
  return nums;
};

예제코드는 통과했지만, testcase 에서 에러가 났다.
이유는 앞에서부터 없애고 뒤에서 추가하는 구조이다보니, 인덱스 i가 제대로 동작을 하지 않았기 때문이다.
(index[0]에서 0을 만나 splice됐을 때 다음 조사는 또다시 index[0]을 해야하지만 index[1]을 한다.)



나의 풀이 (success)

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function (nums) {
  for (let i = nums.length-1; i >= 0; i--) {
    if (nums[i] === 0) {
      nums.splice(i, 1);
      nums.push(0);
    }
  }
  return nums;
};

위의 문제는 for문을 거꾸로 돌리므로써 해결할 수 있었다.
예전에 한번 본 적이 있는 방법인데 오랜만에 다시 하려니 기억이 안나서 조금 해맸다.