티스토리 뷰

반응형

 

 


removeLast()

removeLast()는 배열과 같은 컬렉션의 마지막 값을 제거하고 제거한 값을 리턴하는 메서드입니다.
해당 메서드는 인스턴스 메서드로, 컬렉션을 준수하는 인스턴스에서 접근해서 사용할 수 있습니다.

컬렉션 관련해서는 제가 예전에 포스팅을 공유합니다.

 

스위프트의 기본 컬렉션 타입 특징 및 사용방법

Colletion Types 컬렉션 타입 Swift는 기본적으로 3개의 원시 컬렉션 타입을 갖고 있습니다. 이들은 값들을 다양한 목적에 따라 저장하고 관리하는데 사용됩니다. 해당 컬렉션들은 Array, Set, Dictionary 등

0urtrees.tistory.com

 

 


removeLast() 선언방법

removeLast() 메서드의 선언방법입니다.

- mutating func로 정의되어 있는 것은 배열이 구조체이기 때문인데요. 구조체의 경우 메서드 연산간에 내부적으로 변경이 필요하면 mutating 키워드를 붙여주어야 합니다.

- @discardableResult 노테이션은 반환되는 값에 대해서 별도의 처리를 하지않아도 컴파일러에서 경고를 유발하고싶지 않을때 사용합니다. 가령 removeLast() 메서드는 Element를 반환하죠. 이때의 Element는 해당 메서드를 사용한 컬렉션의 제거된 마지막 값을 반환합니다.

만약 @discardableResult 를 지정하지 않으면, 해당 반환값을 받아서 처리하지 않으면 노란 경고를 보실 수 있습니다.

 

 


removeLast() 반환 값 및 활용방법

removeLast()의 반환값은 앞서 말했듯이 해당 컬렉션의 마지막 값입니다.

removeLast() 사용 시 주의사항은 텅 비어있는 컬렉션에 사용하면 안된다는 것입니다. 값이 없는데 마지막 값을 제거할 수 없겠죠? 그러므로 removeLast() 메서드를 사용할 때에는 해당 컬렉션의 값이 들어 있는지 상태를 잘 확인하셔야 겠습니다. 

보통 swift 알고리즘 문제를 풀때는 배열로 pop()과 같은 동작을 할때 많이 사용하는 메서드이며, removeLast() 메서드의 시간복잡도는 O(1)입니다. 맨 마지막 값을 제거함으로 인해서 사이드이펙트로 다른 값의 위치가 바뀔일이 없기 때문입니다. 

이번에는 removeLast()에 이어 removeFirst() 메서드를 보도록 하겠습니다. 

 

 


removeFirst(_:)


removeFirst(_:) 메서드 또한 인스턴스 메서드입니다.

해당 메서드는 컬렉션 맨 뒤의 값이 아닌 앞에서부터 값을 제거해야할 때 사용합니다. 

 

 


removeFirst(_:) 선언방식

removeFirst(_:) 메서드 또한 내부적으로 변화가 필요하기 때문에 mutating func 키워드가 붙습니다.

removeLast()와 달리 인자값을 받을 수 있는데요. 인자값에 대해서 보겠습니다. 

 

 

 


removeFirst(_:) 인자 값과 활용방법

removeFirst(_:)에서 받을 수 있는 인자값, k는 컬렉션의 앞에서부터 몇개의 값을 제거할 지를 지정하는데요. 
별도의 인자를 안받고 실행할 수도 있습니다. 그 경우에는 맨앞의 값 1개만 제거를 하게 됩니다. 

removeLast()와 마찬가지로 removeFirst(_:) 사용간에도 배열에 값이 있는지, 삭제하려는 값 갯수만큼 해당 컬렉션이 충분한 크기를 갖고 있는지 확인 후 사용해야 합니다. 

위의 예시를 보면 bugs라는 [String] 타입 문자열 배열이 존재하고, removeFirst(3)으로 앞에서부터 3개의 값을 제거하는 모습입니다. 

removeLast()의 복잡도는 O(1)이었지만 removeFirst(_:)의 복잡도는 O(N)입니다. 앞의 값이 제거되면 뒤에 있던 값들이 삭제된 자리를 메꾸기 위해 이동하면서 복잡도가 증가하게 됩니다. 

이부분은 가령 배열을 큐처럼 사용하려 할때 무심코 pop()을 removeLast() / push()를 removeFirst(_:) 처럼 사용할 수 있는데 이러한 시간복잡도 상 성능을 잘 이해하고 푸셔야 할겁니다. 

가령 스위프트에서 removeFirst(_:)를 큐 동작과 매칭해서 생각해서 알고리즘 문제 풀이 간 TLE(시간초과)를 유발하는 경우가 있으니, 각 메서드의 성능에 대해 이해하면서 스위프트 코딩을 하는게 좋을 것 같습니다.

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함