본문 바로가기
프로그래밍 이야기/C++ 기초

Move Zeros

by Mulder5 2021. 10. 18.
반응형

주어진 배열에서 숫자 0은 모두 오른쪽 끝으로 옮겨라. 0이 아닌 숫자들의 순서는 바뀌면 안된다.

[ 0, 5, 2, 1] -> [ 5, 2, 1, 0]
[ 5, 7, 0 , 9, 13, 0, 45] -> [5, 7, 9, 13, 45, 0, 0]

  • 0을 찾아서 오른쪽 끝으로 보내기?
    첫번째 예에서 0을 1의 오른쪽으로 보낼때 다른 숫자들도 하나씩 왼쪽으로 밀어야 한다. 
  • 0을 찾을때 마다 오른쪽의 있는 숫자와 버블 스왑 반복
  • 반대로 쉽게 생각해보면 0이 아닌 숫자를 만나면 왼쪽으로 보내면 되겠다!

구현 예

#include <iostream>

void moveZeros(int* nums, int numsSize)
{
    int wIndex = 0;
    for (int index = 0; index < numsSize; index++)
    {
        if (nums[index] != 0)
        {
            nums[wIndex] = nums[index];
            wIndex++;
        }
    }

    for (; wIndex < numsSize; wIndex++)
    {
        nums[wIndex] = 0;
    }
}

void printNums(int* nums, int numsSize)
{
    for (int i = 0; i < numsSize; i++)
    {
        std::cout << nums[i];
    }
    std::cout <<"\n"<< std::endl;
}
int main()
{
    int Nums[] = { 0, 4, 5, 6, 0, 7, 8, 9 };
    int NumsSize = 8;
   
    printNums(Nums, NumsSize);

    moveZeros(Nums, NumsSize);
    
    printNums(Nums, NumsSize);
}

 

반응형

'프로그래밍 이야기 > C++ 기초' 카테고리의 다른 글

Find Peak Element  (0) 2021.10.25
Find Pivot Index  (0) 2021.10.19
이진 탐색 (Binary search)  (0) 2021.10.18
함수 오브젝트와 람다 표현식  (0) 2021.09.17
[Design Pattern] Container  (0) 2021.02.05