Q. 주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.
def move_zeros(nums):
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0)
return nums
Review
1. 0의 개수를 count
2. 0을 모두 삭제
3. 0의 개수만큼 리스트의 뒤에 0을 추가
--> 해결가능하지만 nums가 모두 0으로 이루어진 리스트일 경우, 필요없는 과정을 실행한다. 0을 리스트에서 제거하고 추가하는 방식이 아닌 자리를 바꾸는 방식으로 변경한다.
정렬 알고리즘 중 하나로, 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법이다.
예를 들어, 임의로 나열된 숫자를 오름차순으로 정렬하고 싶다.
바로 옆의 숫자와 비교했을 때, (1) 작으면 다음 숫자로 이동, (2) 크면 위치를 교환
교환 전: 3 6 8 5 2 7 4 1
교환 후: 3 6 5 8 2 7 4 1
모든 숫자가 제자리를 찾고 더이상 위치를 교환하지 않을 때, 정렬이 완성된다. 정렬해야 하는 요소가 적을 땐 코드가 간단하고 효율적이지만 요소가 늘어날수록 정렬에 드는 시간이 제곱으로 증가하기때문에 많은 요소를 정렬할 땐 비효율적이다.
def move_zeroes(nums):
i = 0
for j in range(len(nums)):
if nums[j]!=0:
nums[i],nums[j] = nums[j],nums[i]
i += 1
0을 제외한 숫자는 정렬할 필요가 없다. 0을 뒤로!!
#for문이 돌아갈 때마다 출력한 nums
[0, 1, 0, 3, 12]
[1, 0, 0, 3, 12]
[1, 0, 0, 3, 12]
[1, 3, 0, 0, 12]
[1, 3, 12, 0, 0]