codekata #13

신승호·2021년 5월 11일

codekata

목록 보기
9/15

codekata_0513


문제

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

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

need to know

  1. 새로운 배열이 아닌 그냥 기존배열을 그대로 가지고 바꾸는거
  2. 자리를 바꿔준다.
  3. 배열이 홀 수일때의 경우를 잘 생각해봐라

문자로 짜봐

  1. 먼저, 배열을 하나씩 훑기 위해서 while문을 사용하고, 인덱스 0부터 시작하기위해 n=0 으로 주고 시작하자.
  2. 이때, 0일때는 숫자 빼서(nums.pop(n)) 바로 뒤로 보내고(nums.append(nums_pop)), 따로 그다음 인덱스의 숫자를 검사할필요 없으니 그냥 continue해서 위로 올라가자
  3. 글고 0이 아닐 때, 인덱스인 n+1해서 다시 돌려주도록 continue 가자
  4. 중요한건, 언제 그만하는가 ... ? 결국 0은 다 뒤로가기 때문에, 앞쪽의 0이 아닌 숫자의 개수만큼만 해주면 된다.

정답

def move_zeroes(nums):
    n = 0 				# 1
    while n < len(nums)-nums.count(0): #1,4
        if nums[n] == 0:		# 2
            nums_pop = nums.pop(n)
            nums.append(nums_pop)
            continue
        elif nums[n] != 0:		# 3
            n += 1
            continue
    return nums

참고

  • while문, continue, `break``
  • `count()``
  • pop()
  • append()
profile
신승홉니다

0개의 댓글