방법은 여러가지 있겠지만 문제에서 새로운 배열을 생성하지 말라고 했기때문에
splice와 push를 사용해야겠다는 생각이 들었다.
const moveZeroes = nums => {
let cnt = 0;
for (i=0; i<nums.length; i++) {
if (nums[i] == 0) {
nums.splice(i,1);
i--;
cnt += 1;
}
}
for (j=0; j<cnt; j++) {
nums.push(0)
}
return nums;
}
for문안에서 nums배열 안에 0이 있으면 splice를 사용하여 빼준다.
i--; 를 해주는 이유는
한 반복이 끝나고 원래 i가 1 커지지만
그렇게되면 splice로 인해 생기는 인덱스의 변화때문에
기존에 0바로 뒤에 있는값은 skip하는 문제가 발생하기 때문이다.
그리고 push를 기존의 for문에서 써주지 않고 따로 써주는 이유는
if조건문에서 0인값을 찾기 때문에
거기서 배열에 0을 넣어주면 무한루프에 빠지게 된다.
그래서 cnt라는 변수를 이용해 몇개의 0이 빠졌는지 세어주고,
마지막에 그 갯수만큼 push를 이용해 배열에 넣어준다.