반응형
1. 문제
- 배열 nums가 주어질 때, 모든 0을 오른쪽에 몰아넣어라.
- 추가 배열을 생성하지 마라.
2. 해결
/**
Do not return anything, modify nums in-place instead.
*/
function moveZeroes(nums: number[]): void {
let pointer = 1; // 0 위치 찾는 포인터.
let i = 0; // 현재 요소 포인터.
while(pointer <= nums.length -1) { // 마지막 요소까지 반복.
// 현재 요소가 0이고, 포인터 요소가 0이 아니면,
if(nums[i] === 0 && nums[pointer] !== 0) {
nums[i] = nums[pointer]; // 현재 요소를 포인터 요소로 교체.
nums[pointer] = 0; // 포인터 요소는 0으로 업데이트.
i++; // 다음 위치로 이동.
} else if(nums[i] !==0) i++; // 현재 요소가 0이 아니면 위치 이동.
pointer++
}
};
- for문으로 하다가 이상해서 확인해봤는데 for문에서 i는 내가 컨트롤할 수 없이 자동 증가하기 때문에 결과가 이상했다.
- 이럴 땐 while문을 고려하자.