주어진 배열에서 0이 아닌 엘리먼트들의 순서는 유지한 채, 0만 맨 끝으로 이동시키는 문제.
복사본 없이 풀이해야 하며, 동작 시간은 최소화 하는 방향으로 완성할 것.
let moveZeroes = function(nums) {
for(let i = nums.length-1; i >= 0; i--){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
return nums
};
let moveZeroes = function([0,0,3,4,7]) {
for(let i = 0; i <nums.length; i++){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
return nums
};
1) i가 0일 때, if문 진입.
[0,0,3,4,7].splice(0,1) // [0,3,4,7]
[0,3,4,7].push(0) // [0,3,4,7,0]
2) i가 1일 때, if문 통과 후 그대로 return
// [0,3,4,7,0]
let moveZeroes = function([0,0,3,4,7]) {
for(let i = nums.length-1; i <=0; i--){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
return nums
};
1) i가 4일 때, if문 진입.
[0,0,3,4,7].splice(4,1) // [0,3,4,7]
[0,3,4,7].push(0) // [0,3,4,7,0]
2) i가 3일 때, if문 통과 // [0,3,4,7,0]
3) i가 2일 때, if문 통과 // [0,3,4,7,0]
4) i가 1일 때, if문 통과 // [0,3,4,7,0]
5) i가 0일 때, if문 진입
[0,3,4,7,0].splice(0,1) // [3,4,7,0]
[3,4,7,0].push(0) // [3,4,7,0,0]
투포인터 알고리즘은 1차원 배열 내에서, 각각 다른 원소를 가리키는 2개의 포인터를 두고 이를 이동하면서 답을 도출하는 방식이다.