Computer Science/자료구조

코딩테스트 Arrays moveZeros | 코드없는 프로그래밍

토마토. 2021. 9. 5. 20:47

코딩 테스트, 초급, moveZeros - YouTube

문제 출처 - (1) Move Zeroes - LeetCode

 

Move Zeroes - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

내 풀이

class로 되어있어서 신기함. 

class Solution:
    def moveZeroes(self, nums):
        index = 0
        count = 0
        while True:
            if index == len(nums) - count:
                return nums
            else:
                if nums[index] == 0:
                    count += 1
                    nums.append(0)
                    del nums[index]
                else:
                    index += 1
        return

idea

[0,5,0,7,6,3] in place에서

0을 끝으로 보내되, 순서를 바꾸지 말아야 한다. 

 

0을 찾아서 끝으로 보내자!

그러다보면, operation이 복잡해진다. 

 

0을 밀자. 

 

숫자를 찾아서 왼쪽으로 보낸다면?

숫자가 이동할 이유는 없다. 

 

basic idea

0이 아닌 숫자를 찾아서 왼쪽으로 보낸다. 

index를 정의한다. 

숫자를 찾아서 swap 혹은 copy라고 생각한다. 

void movesZeroes(int [] nums)
{
  int wIdx = 0;
  for (int idx = 0; idx < nums.length ; idx++)
  {
    if (nums[idx]!=0)
    {
      swap(nums[wIdx], nums[idx]);
      wIdx++;
    }
  }

  for (;wIdx<num.length;wIdx++)
  {
    nums[wIdx] = 0;
  }
}

 

다시 풀어보기

class Solution:
    def moveZeroes(self, nums):
        clean_zone = 0
        for index in range(len(nums)):
          if nums[index] != 0:
            nums[clean_zone], nums[index] = nums[index], nums[clean_zone]
            clean_zone += 1
          else:
            pass
        print(nums)
        return nums


s = Solution()
s.moveZeroes([0,1,2,3,4,0,0,3,4,2])

point 1. index를 옮겨가며 문제를 풀어라

point 2. pivot index를 두 개 잡는다.