Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 1.59 KB

풀이_LC283.md

File metadata and controls

31 lines (21 loc) · 1.59 KB

🥃 LeetCode 283. Move Zeroes

  • Date : 2021.08.22(일)
  • Time : 15분

Problem

  • 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.

Constraints

  • 1 <= nums.length <= 10^4 -2^31 <= nums[i] <= 2^31 - 1

Example

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



풀이

    def moveZeroes(self, nums: List[int]) -> None:
        nums[:] = [i for i in nums if i != 0] + [0] * nums.count(0)
        return nums

: 최대한 코드를 한 줄로 줄이는 연습을 할 수 있었던 문제. 사실 문제는 쉬웠다. 배열의 값이 0이 아니라면 그 순서를 유지하면서 앞으로 이동하고, 0이라면 뒤로 이동시키는 방식이다. 이 방법은 탐색으로 검사를 하면서 0이면 삭제 후 뒤에 append 시킬 수도 있다. 하지만 나는 nums를 for문으로 검사하면서 0이 아닌 것들만 먼저 배열로 생성 후 그 뒤에 0의 갯수를 count로 검사해 붙여주었다. 여기서 포인트는 nums = 이 아니라 nums[:] = 이라는 것이다. 문제의 조건중에 array의 복사본을 만들지 말라는 얘기가 나온다. 만약 nums = 으로 코드를 구성했다면 이것은 복사본이 만들어지는 경우이다. 우리는 원래의 nums가 수정되기를 바라지만 새로운 nums가 메모리에 저장된다. 그렇기 때문에 nums[:]를 통해서 nums의 전체 리스트 요소를 가져와주고 그 부분을 수정해줘야한다.