본문 바로가기
코딩 공부

Leetcode Move Zeroes Python 파이썬 시도

by 카우보이연구소 2022. 1. 14.

요즘에는 개발자들이 회사에 취업하기 위해서 사용한다는 리트코드 (leetcode) 사이트의 문제들을 풀어보고 있습니다. 이제 막 시작한 초보자라 힘든 점이 많아서 이렇게 글로 남겨서 복습하려고 합니다.

 

문제: Move Zeroes
등급: Easy

내용: 정수 배열 nums가 주어지면, 0을 모두 오른쪽 끝으로 움직여라.

* 정수 배열 nums를 복사 X

<코드 & 논리>

첫 번째 시도:

머리에 바로 든 생각은, 배열에 있는 0을 다 없애면서 갯수를 카운트하여 그만큼 또 더하자고 생각했다. 속도 면에서는 딱히 좋은 코딩 방법은 아니지만, 어쨌든 통과는 시켜줬으니 좋다고 해야겠다.

class Solution(object):
    def moveZeroes(self, nums):
        count = 0
        
        while 0 in nums:
            nums.remove(0)
            count += 1
                
        for i in range(count):
            nums.append(0)

두 번째 시도:

이 방법은, 다른 방법이 없을까 하며 인터넷 찾아보다가 나온 방법이다. 역시 나보다 똑똑한 사람들 너무 많다. 

class Solution(object):
    def moveZeroes(self, nums):
        non_zero_index = 0
        leng = len(nums)
        #getting numbers to the left
        for i in range(leng):
            if nums[i]:
                nums[non_zero_index] = nums[i]
                non_zero_index += 1
        for index in range(non_zero_index, leng):
            nums[index] = 0

우선, non_zero_index라는 변수를 0의 값으로 설정. for loop으로 배열의 인덱스는 다 나오게 한다. if nums[i]로, nums[i]가 0이 아니라면 그 숫자를 앞으로 갖고 오고, 계속 다른 index에 값을 할당하기 위해 non_zero_index는 +1 해준다.

 

배열을 다 살펴봐서 앞으로 다 옮겨놨으면, 나머지는 다 0이다. 그래서, for loop을 하나 더 해서, 0이 아닌 숫자 뒤의 나머지를 0으로 만들어준다.

 

<오류, 힘들었던 점>

큰 오류 없었으며, 크게 힘들었던 점은 없었다. 

 

하지만, 항상 드는 생각이지만, 어떻게 두번쨰 방식 같은 생각을 하게 되는지 궁금하다. 무엇을 공부해야지 프로그래머처럼 생각하게 될까?

 

<총평 외 comment>

오늘도 열심히, 내일도 열심히!

 

Happy coding!

 

Move Zeroes - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

댓글