본문 바로가기
2. 우당탕탕 개발자/2-1. 공부기록

2020.08.26 Move Zeros 풀이

by Little Monkey 2020. 8. 26.
반응형

문제) 숫자 배열이 주어질때, 0은 배열의 끝으로 몰아 수정하는 것. 이 때, 배열은 카피해서 쓸 수 없으며, 원배열 자체를 수정해야 한다. 

풀이) 야호! 이번 문제도 정해놓은 시간 안에 풀었다! (쉬운 문제, 정답률이 높은 것만...선정) 빈 배열을 정의하고, 0이 나올 때마다 해당 인덱스를 빈 배열에 오름차순으로 추가한다. 0이 아닌 숫자가 나올 경우, 0의 인덱스 중 제일 작은 숫자를 선정해 (오름차순으로 추가했기 때문에, 0번째 인덱스를 가져다 쓰면된다) 해당 인덱스와 순서를 스위치한다. O(n) 시간 복잡도를 가진다. 

 

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

 


다른 풀이) 우선 변수 하나를 정의하고, 해당 변수를 이용해 0이 아닌 숫자를 왼쪽으로 쭉 몰아 넣는다. 그 후 마지막 0이 아닌 숫자 이후로는 nums 길이까지 0으로 바꾼다. 참신한 풀이같다!

 

var moveZeroes = function(nums) {
   let lastNonZero = 0;
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== 0) {
            nums[lastNonZero++] = nums[i]
        }
    }
    for(let i = lastNonZero; i < nums.length; i++) {
        nums[i] = 0
    }
  return nums;
};

 

https://leetcode.com/problems/move-zeroes/

 

Move Zeroes - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

반응형

댓글