[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 0 이동시키기

inu 2020. 7. 18. 18:06
반응형

0 이동시키기

  • 0과 양수가 섞여있는 배열이 존재한다.
  • 해당 배열의 0들을 전부 뒷쪽으로 옮겨 [양의정수들, 0들] 형태로 나타나야 한다.

풀이

def moveZerosToEnd(nums):
    currentPosition = 0    
    for i in range(len(nums)):
        if nums[i] != 0:
            temp = nums[currentPosition]
            nums[currentPosition] = nums[i]
            nums[i] = temp
            currentPosition += 1

    return nums
  • 단순히 생각해보면 리스트 2개를 만들고, 각각 양수와 0을 담아 마지막에 합칠 수 있다.
  • 하지만 그런 방법은 공간복잡도 측면에서 비효율적이다.
  • 따라서 해당 배열 자체를 수정하는 방법을 생각해보았다.
  • 현재 i 인덱스의 값이 0일 경우 currentPosition은 증가되지 않는다. 즉, 0을 만났을 때 i는 증가되면 currentPosition은 증가되지 않는다.
  • 따라서 i가 증가되어 0이 아닌 값을 만났을 때 currentPostion의 값과 i의 값을 바꾼다면, 0의 위치를 계속해서 뒤로 보낼 수 있을 것이다.
  • 여기서 temp라는 값도 사용하기 싫다면, currentPosition에 i의 값을 그냥 넣어주고, i를 0으로 덮어주는 방법도 있다. currentPosition은 i의 값이 0이 아니고, 아직 아직 0을 완전히 오른쪽으로 옮긴 것이 아닌 이상 0일 수밖에 없기 때문이다. (0을 완전히 오른쪽으로 옮겼다면 i의 값은 반드시 0이다.)
반응형