drop-of-water

문제 링크

조건

  • 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--;
    }
  }
};

😊