[리트코드] 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문을 거꾸로 돌리므로써 해결할 수 있었다.
예전에 한번 본 적이 있는 방법인데 오랜만에 다시 하려니 기억이 안나서 조금 해맸다.