[Two Pointers, Easy] Move Zeroes

송재호·2025년 3월 11일
0

https://leetcode.com/problems/move-zeroes/description/?envType=study-plan-v2&envId=leetcode-75

2중 for문을 활용하면 너무 쉬운 문제다.
O(N)으로 푸는 방법을 생각해봐야 한다.

문제 카테고리가 투포인터이므로 포인터 두개를 활용할 수 있는 방법으로 해야 한다.
0이 아닌 것을 찾았을 때 left와 right를 swap하고, left 인덱스를 증가시켜주면 된다.

class Solution {
    public void moveZeroes(int[] nums) {
        
        int left = 0;

        for (int right=0; right<nums.length; right++) {
            if (nums[right] != 0) {
                int temp = nums[right];
                nums[right] = nums[left];
                nums[left++] = temp;
            }
        }
    }
}

아니면 문제가 나머지 값들의 순서 보장이라고 했으므로
별도의 인덱스를 주어 나머지 값 먼저 넣고, 차이가 나는 만큼 마지막에 0 넣어주는 방법도 있다.

class Solution {
    public void moveZeroes(int[] nums) {
        
        int index = 0;
        for (int num : nums) {
            if (num != 0) {
                nums[index++] = num; 
            }
        }

        while (index < nums.length) {
            nums[index++] = 0;
        }
    }
}
profile
식지 않는 감자

0개의 댓글