본문 바로가기
DS & Algo/풀이모음

[leetcode/JS] 283_Move Zeroes 풀이

by 5kdk 2022. 11. 20.

🎲 문제

283. Move Zeroes

Easy


정수 배열 nums가 주어지면 0이 아닌 요소의 상대적인 순서를 유지하면서 모든 0을 끝으로 이동합니다.
배열의 복사본을 만들지 않고 이 작업을 제자리에서 수행해야 합니다.

 

더보기

 

Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Note that you must do this in-place without making a copy of the array.

 

 

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]

Example 2:

Input: nums = [0]
Output: [0]

 

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

 

Follow up: Could you minimize the total number of operations done?

 

 


💡 접근 방법

  • 배열의 요소중 0은 오른쪽으로, 나머지 요소들은 순서대로 정렬해야 하기 때문에, for loof의 i와 idx라는 변수를 선언하여 두 가지 인덱스 포인터로 배열을 정렬할 것이다
  • for loof들 돌면서 i번째 인덱스가 0이 아닐경우 -> nums[idx]에 num[i]로 바꿔준다
  • idx와 i가 같지않으면 num[i]에 0을 할당한다
  • idx 카운트를 증가하여 배열을 반복한다

 

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

 


 

📖 후기

새로운 배열을 만들어서 해결하기보다 "idx"로 포인터로 새 요소를 처리하는 작업을 수행하면, 공간복잡성 O(1)으로 해결할 수 있다.

공간복잡성: O(1)

시간복잡성: O(n)

댓글