【LeetCode】283. Move Zeroes 제거

질문으로 연결

문제 개요


진열nums이 주어졌기 때문에 진열에 포함된 0를 0이 아닌 원소의 순서를 바꾸지 않고 배열 끝으로 이동합니다.
예:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

구속

  • in-place에 설치(직접 입력 변경)
  • 작업 최소화
  • 생각


    앞에서 배열을 보고 0이 아니면 앞에서부터 순서대로 배열한다.
    이미지:nums는 제로인지 여부를 확인하는 요소다.
    첫 번째 요소는이기 때문에 아무것도 하지 않는다
     ↓
    [0, 1, 0, 3, 12]
    
    0는 비영원소이기 때문에 첫 번째 한정
        ↓
    [0, 1, 0, 3, 12]
    [1, 1, 0, 3, 12]
    
    요소는1이기 때문에 아무것도 하지 않는다
           ↓
    [1, 1, 0, 3, 12]
    
    0는 비영원소이기 때문에 두 번째 한정
              ↓
    [1, 1, 0, 3, 12]
    [1, 3, 0, 3, 12]
    
    3는 비영원소이기 때문에 세 번째 한정
                 ↓
    [1, 1, 0, 3, 12]
    [1, 3,12, 3, 12]
    
    이 시뮬레이션을 통해 알 수 있듯이 비영원소가 어디에 있는지 지시해야 한다12.
    또한 기대하는 출력index이기 때문에 [1,3,12,0,0]를 끝까지 이동하는 작업이 필요하지만 마지막 요소를 본 후0를 마지막 요소까지 압축하면 기대하는 결과를 얻을 수 있다.
    다음과 같은 생각으로 구현:
    class Solution(object):
        def moveZeroes(self, nums):
            """
            :type nums: List[int]
            :rtype: None Do not return anything, modify nums in-place instead.
            """
            index = 0
            
            for n in nums:
                if n != 0:
                    nums[index] = n
                    index += 1
            
            while(index < len(nums)):
                nums[index] = 0
                index += 1
    

    좋은 웹페이지 즐겨찾기