Study/Algorithm

[Leetcode] 283. Move Zeros (C++ 풀이)

shan00 2025. 2. 8. 11:02

정수 배열이 인자로 주어졌을 때, 0인 요소들은 우측 끝으로 모으고, 나머지 정수들은 순서를 그대로 유지하며 앞으로 당겨와야한다. 

 

example 1에서 보면, 0들은 다 뒤로 밀려나고, 나머지 정수들은 "순서 그대로" 앞으로 옮겨왔다. 최적의 방법은 아니지만, 맨 앞부터 탐색하면서 0을 만나면, 가장 가까운 0이 아닌 정수를 만나면 자리를 바꿔주면서 뒤로 밀었다.

 

 

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int left = 0;
        

        while (left < nums.size()-1){
            if(nums[left] == 0){
                
                for(int i=left+1; i < nums.size(); i++){
                    if (nums[i] != 0){
                        nums[left] = nums[i];
                        nums[i] = 0;
                        break;
                    } 
                }
            }
            left += 1;
        }
    }
};

가장 바깥 while문인 left는 앞에서부터 0을 탐색한다. 그리고 안쪽의 for문은 0이 아닌 수를 탐색하며 앞으로 당겨온다.

 

 

직관적이긴한데, 제일 앞에서 0을 만날 경우, 모든 iteration에서 operation이 일어나는 불상사가 일어나서 최적의 방법은 아니라고 볼 수 있다.