leetCode - move zeros (python, javascript)

728x90
반응형

0 1 0 3 12 가 있을 때 앞에 0이 있으면 뒤의 값과 바꾸는 알고리즘을 사용했다 (삽입 정렬)

만약 이전 값이 0이 아닌 수가 있으면 앞에는 이미 0이 없는 상태이므로 다음 원소로 넘어가면 된다

 

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i,e in enumerate(nums):
            for j in range(i-1,-1,-1):
                if nums[j]!=0: break
                nums[j]=nums[j+1]
                nums[j+1]=0

2) 비슷하지만 조금 다른 풀이  idx=0 (0의 위치라고 가정)로 둔다. 

만약 0이 아닌 수가 있다면 0의 위치에 해당 수를 넣고 해당 수의 위치는 0으로 바꿔준다 (두 자리의 원소를 스위치)

 

i===idx? 를 검사해주는 이유는 만약 0이 아닌수로만 이루어져 있었거나 현재 검사하는 위치 이전에 없었기 때문에 

idx와 i가 같은 경우이다. 그때는 실제로 0이 있는게 아니므로 원래 값을 넣어준다.

아님 아예 idx===i인 경우 continue로 넘어가도 좋을 듯 하다 (idx+=1은 해줘야 한다)

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

 

728x90
반응형
TAGS.

Comments