주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.
(새로운 배열을 생성해서는 안 됩니다.)
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
const moveZeroes = nums => {
for(i=0; i<nums.length; i++){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
for(i=0; i<nums.length; i++){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
return nums
}
처음엔 반복문을 한번만 써서 작성했는데 연달아 나오는 0을 판단하지 못해서
반복문을 연달아 쓰니 통과가 되었으나 좋은 방법은 아닌 것 같았다.
const moveZeroes = nums => {
for(i=nums.length-1; i>=0; i--){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
}
}
return nums
}
반복문을 뒤에서부터 돌 경우에는 한번의 반복문으로도 가능해진다.
const moveZeroes = nums => {
return nums.filter(x=> x !==0).concat(nums.filter(x=> x ===0))
}
또 다른 방법으로는 0이 아닌 배열과 0인 배열을 합치는 방법이 있다.
선지님 마지막 코드는 왠지 남선생님의 향기가 나네요~