배열에 존재하는 0을 모두 배열의 끝으로 옮겨라
단, 새로운 배열을 정의하지 않고 주어진 배열에서만 문제를 해결하라
0 이외에 숫자들의 순서는 변경되지 않아야 한다.
class Solution {
public void moveZeroes(int[] nums) {
}
}
배열 문제를 바라보는 기본적인 시각을 길러주는 문제이다.
포인터 두 개를 이용해서 문제의 요구사항을 처리하는 것!
하나는 숫자를 찾는 포인터
나머지는 0의 위치를 가리키는 포인터
숫자를 찾는 포인터가 for문을 돌며 숫자를 찾고
숫자를 찾았다면 0의 위치를 가리키는 포인터와 swap
swap이 된 경우에는 0의 위치를 가리키는 포인터는 숫자로 채워졌으니 ++1 하여 다음 위치를 가리킨다.
더보기
{
int i = 0; // point 0
int j = 0; // find num
for (; j < nums.length; j++) {
if (nums[j] != 0) { // !! found
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
}
}
}
기본적인 문제임에도 두 개의 포인터를 활용하는 사고방식이 없었다면 어떻게 해결해야 할지 막연했을 것이다.
알고리즘 문제를 푸는 기본적인 개념을 익히는 좋은 문제인 거 같다.