[CodeKata] 13. move_zeroes

그냥·2022년 6월 23일
0

CodeKata

목록 보기
12/18

문제

주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.

새로운 배열을 생성해서는 안 됩니다.
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]


풀이


1. 문제의 조건
1) 인자로 숫자로 이루어진 배열을 받는다.
2) 숫자로 이루어진 배열을 반환한다.
3) 리스트를 새로 생성하지 않는다.

2. 조건에 대한 코드 구현 방법
1) 배열 내에 있는 0이 몇 개 있는지 파악한다.
2) 0의 개수 만큼 for문을 돌려서 remove()를 사용해서 가장 앞에 있는 0을 지움과 동시에 append()를 사용해서 가장 뒤에 0을 추가한다.

3. 구현 코드
def move_zeroes(nums):
  cnt_0 = nums.count(0)

  for i in range(cnt_0):
    nums.remove(0)
    nums.append(0)

  return nums

4. 코드 리뷰
1) 초반에 코드를 작성할 때 nums 내 0을 지우면 리스트의 길이가 변동되는 것을 생각하지 못했다. 이에 따라 for문을 돌릴 때 OutofIndex 오류가 발생하였다.
2) 이에 착안하여 nums의 인덱스를 사용하기 보단 0의 갯수에 맞춰 0을 지우고, 추가하는 방식으로 진행하였다.
3) 0을 지우는 방식 말고 바로 순서를 바꾸는 방법이 있지 않을까 싶다.

5. 최고의 코드
def move_zeroes(nums):
  zero = 0
  
  for i in range(len(nums)):
    if nums[i] != 0:
      nums[i], nums[zero] = nums[zero], nums[i]
      zero += 1

  return nums

1) 요소 삭제를 하지 않고 요소의 위치를 변화하였다.
2) zero를 0의 인덱스로 사용하여 0이 아닌 값과 위치를 변경시킨다.

0개의 댓글