Python 알고리즘 문제 풀이(feat. Code Kata)

윤현묵·2021년 9월 4일
0
post-thumbnail

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

새로운 배열을 생성해서는 안 됩니다.

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

처음 생각한 방식:
반복문을 사용하여 input에서 0이면 모두 삭제하며 횟수를 카운트 합니다.
카운트 수 만큼 반복문을 사용하여 0을 append하여 뒤에 붙여줍니다.

코드

def move_zeroes(nums):
    cnt = 0
    for i in nums:
      if i == 0:
        nums.remove(i)
        cnt += 1
    for j in range(cnt):
        nums.append(0)
    return nums

위와 같이 할 경우 input [0,0,9,0,12]에 대해, [9,0,12,0,0]가 출력됩니다.
함수 중간의 for문에 카운팅을 삽입하여 확인한 결과 for문이 3번 반복한 것을 확인하였습니다.
곰곰히 생각해보니 remove로 0을 삭제할 때마다 기존 입력 값의 리스트 크기가 줄어들어 0을 2번 지우니 3개의 변수만 남아 반복이 3회만 되고 멈춘 것을 알 수 있었습니다.

따라서 아래와 같이 코드를 수정하였습니다.

def move_zeroes(nums):
    for i in nums:
      if i == 0:
        nums.remove(0)
        nums.append(0)
    return nums

기존의 input 배열에 영향이 없도록 0에 대해서 삭제한 바로 뒤에 0을 append 해준 결과 제대로 출력이 되는 것을 확인 할 수 있었습니다.

이번 문제를 통해 배운점:
반복문에 기준이 되는 변수는 가급적 변하지 않도록 하여 생각했던 과정이 꼬이지 않도록 주의해야겠습니다.

profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글