<알고리즘?알고싶음!>-6

이지선·2021년 8월 8일
1

알고리즘

목록 보기
6/10

😎문제

주어진 숫자 배열에서, 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인 배열을 합치는 방법이 있다.

profile
👩🏻‍💻

3개의 댓글

comment-user-thumbnail
2021년 8월 8일

선지님 마지막 코드는 왠지 남선생님의 향기가 나네요~

1개의 답글

관련 채용 정보