프로그래밍/알고리즘+코딩테스트
LeetCode/283.Move Zeros
sleepyotter.
2022. 2. 15. 13:55
iterator를 사용하여 지우고 0의 개수를 cnt하고 뒤에 붙여준다.
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int cnt = 0;
vector<int>::iterator it=nums.begin();
while(it!=nums.end())
{
if(*it==0)
{
cnt++;
it = nums.erase(it);
}
else
{
it++;
}
}
for(int i=0; i<cnt; ++i)
{
nums.push_back(0);
}
return;
}
};
훨씬 빠른 풀이
1 2 3 처럼 0이 없는 경우에는 제 자리에 다시 덧씌우는 형태가 될 것이고
1 0 2 0 3 0 이 되는 경우에는 1 2 3 0 3 0 이 될 것이다. idx는 3이 된 상태로 while문에 진입하여 뒤쪽의 3을 0으로 밀어버린다.
void moveZeroes(vector<int>& nums) {
int idx = 0;
for (auto a: nums) if (a != 0) nums[idx++] = a;
while (idx < nums.size()) nums[idx++] = 0;
}