반응형
주어진 배열에서 숫자 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 |