요즘에는 개발자들이 회사에 취업하기 위해서 사용한다는 리트코드 (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!
'코딩 공부' 카테고리의 다른 글
[Binary Tree / 이진 트리] Leetcode - Binary Tree Inorder Traversal Python 파이썬 (0) | 2022.01.17 |
---|---|
[Binary Tree / 이진 트리] Leetcode - Binary Tree Preorder Traversal Python 파이썬 (0) | 2022.01.16 |
Leetcode Rotate Array 파이썬 시도 (1) | 2022.01.13 |
Leetcode Best Time to Buy and Sell Stock II 파이썬 시도 (2) | 2022.01.12 |
댓글