😊
Move Zeroes
August 14, 2022
문제 링크
조건
- 1 <= nums.length <= 10^4
- -2^31 <= nums[i] <= 2^31 - 1
입력값
- nums = 그냥 배열
출력값
- 없음, nums 배열 요소의 위치들만 바꾸면됨
풀이과정
- 배열을 돌면서 0인 경우 해당 idx의 값을 삭제 후 배열의 맨 뒤에 0 을 넣어준다
- delete로 삭제 하면 삭제된 idx의 값이 undefined로 바뀌기 때문에 배열을 돌면서 undefined인 경우 배열 요소를 삭제 해주었다
- 참고: 처음에 삭제할때 splice로 삭제한 후 나중에 삭제한 0의 갯수만큼 배열에 0을 추가해주는 방법도 있다
- 참고: 처음에 삭제할때 splice로 삭제하면서 동시에 0을 추가해 한개의 루프로 해결하려고 해봤는데 index값이 줄어 들기 때문에 삭제 후 index를 1 줄여주고 나니 무한루프에 빠졌었다
코드
var moveZeroes = function (nums) {
let len = nums.length;
// 배열을 돌면서 0인 경우 해당 idx의 값을 삭제 후
// 배열의 맨 뒤에 0 을 넣어준다
for (let i = 0; i < len; i++) {
if (nums[i] === 0) {
delete nums[i];
nums.push(0);
}
}
// delete로 삭제 하면 삭제된 idx의 값이
// undefined로 바뀌기 때문에 배열을 돌면서
// undefined인 경우 배열 요소를 삭제 해주었다
for (let i = 0; i < len; i++) {
if (nums[i] == undefined) {
nums.splice(i, 1);
i--;
}
}
};
😊