티스토리 뷰
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(시간초과)를 유발하는 경우가 있으니, 각 메서드의 성능에 대해 이해하면서 스위프트 코딩을 하는게 좋을 것 같습니다.
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
스위프트 고차함수 활용, 백준 X보다 작은수 문제풀이 (0) | 2020.09.04 |
---|---|
백준 아스키코드 11654, swift asciiValue 문제풀이 (0) | 2020.09.03 |
프로그래머스 K번째 수, swift 알고리즘 문제풀이 (0) | 2020.08.28 |
백준 Swift, 막대기_17608 스택(Stack)문제풀이 (0) | 2020.08.26 |
swift 알고리즘, 문자열 입력 없을 때까지 입력받는 방법 (0) | 2020.08.22 |
- Total
- Today
- Yesterday
- SwiftUI
- 컬렉션
- Swift 알고리즘
- 백준swift
- Protocol
- swift 문자열
- createML
- ios
- swift reduce
- swift문제
- 스위프트
- CoreML
- publisher
- 개발자문서
- 백준알고리즘
- Collection
- 김프매매
- swift string
- 부스트코스
- uikit
- 자연어처리
- swift 기초
- 프로그래머스
- 프로토콜
- swift
- 프로그래머스swift
- 알고리즘
- 알고리즘문제
- swift알고리즘
- swift언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |