공대생의 비망록

[LeetCode][Easy] Move Zeroes Python 풀이 본문

Programming Language/Python

[LeetCode][Easy] Move Zeroes Python 풀이

myungsup1250 2026. 2. 8. 01:13

멍청한 풀이: 시간복잡도 O(n^2)

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = len(nums) - 1; j = 0; zeros = 0; moved = 0
        while i >= 0:
            if nums[i] != 0:
                zeros += 1
                i -= 1
            else:
                if zeros == 0: # if there's 0 at the end of the array, skip.
                    i -= 1
                    continue
                for j in range(zeros):
                    nums[i+j] = nums[i+j+1]

                nums[i+j+1] = 0
                zeros = 0
                moved += 1
                i = len(nums) - moved - 1

 

O(n)으로 개선하였으나 for-loop를 2번 사용하는 풀이:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """

        zeros = 0; i = 0; j = 0; size = len(nums)
        while i < size:
            if nums[i] == 0:
                zeros += 1
            else:
                nums[j] = nums[i]
                j += 1
            i += 1
        for ind in range(zeros):
            nums[size - ind - 1] = 0

 

변수 사용 최소화는 물론 for-loop 역시 단 한번만 써서 문제를 해결하는 풀이 (시간복잡도는 역시 O(n)):

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