오늘도 개발

9. Move Zeros 본문

자료구조 & 알고리즘/Leetcode

9. Move Zeros

Sueeeeeee 2022. 5. 25. 23:40

문제

https://leetcode.com/explore/learn/card/fun-with-arrays/511/in-place-operations/3157/

nums 배열의 0을 모두 끝으로 이동시켜라.

0이 아닌 요소는 순서를 그대로 유지해야 하고 in-place 방식을 사용해야 한다.

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

 

내가 해결한 방식

i는 0을 찾는 포인터,

j는 0이 아닌 걸 찾는 포인터.

i는 0에서, j는 1에서 시작.

i가 0이고 j가 0이 아니면

i 요소와 j 요소 교체

 

Input이 [1, 2, 3, 1]인 경우 [1, 2, 1, 3]으로 잘못된 결과 나옴 

[1, 2, 3, 1]인 경우 i가 j보다 커지는 경우가 생겨서 발생한 에러. 

void moveZeroes(int* nums, int numsSize){
    int i = 0;
    int j = 1;
    while (i < numsSize && j < numsSize){
        // i는 0을 가리키게 만듦
        if (nums[i] != 0) i++;
        // j는 0이 아닌 걸 가리키게 만듦
        if (nums[j] == 0) j++;
        if (j < numsSize && i < numsSize){
            if (nums[j] != 0){
                // i가 0이고 j가 0이 아닐 때 두 요소 교체
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
                i++;
                j++;
            }
        } 
    }
}

 

리트코드 해결책

zero_index는 0인 요소를 가리키는 포인터

i는 0이 아닌 요소를 가리키는 포인터

def moveZeroes(self, nums: List[int]) -> None:
    zero_index = 0

    for i in range(len(nums)):
        if nums[i] != 0:
            nums[i], nums[zero_index] = nums[zero_index], nums[i]
            zero_index += 1

 

'자료구조 & 알고리즘 > Leetcode' 카테고리의 다른 글

11. Remove Element  (0) 2022.05.31
10. Sort Array By Parity  (0) 2022.05.26
8. Replace Elements with Greatest Element on Right Side  (0) 2022.05.22
7. Valid Mountain Array  (0) 2022.05.20
6. Check If N and Its Double Exist  (0) 2022.05.19