Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 31
Archives
Today
Total
관리 메뉴

cchanmi

[Swift] 문자열의 문자 재정렬 (reversed, sort, sorted) 본문

Swift

[Swift] 문자열의 문자 재정렬 (reversed, sort, sorted)

cchanmi 2022. 9. 6. 23:44

안녕하세요. :)

알고리즘 문제를 풀다 보면 reversed, sort, sorted와 같은 문자열 재정렬 함수를 사용하게 되는 경우가 종종 있는데요.

좀 더 정확하게 알기 위해 블로그에 정리해 보겠습니다.

 


reversed

먼저 공식 문서를 살펴보았습니다...

https://developer.apple.com/documentation/swift/string/reversed()

 

Apple Developer Documentation

 

developer.apple.com

 

reversed 함수는 컬렉션 요소를 역순으로 표시해 준다고 적혀 있네요.

또, reserved 함수를 호출하여 사용했을 때, 새로운 배열을 반환하는 것이 아니라, 기존의 컬렉션을 래핑하여 요소를 역순으로 정렬해 준다고 적혀 있습니다!

 

 예를 들어 123이라는 Int형 정수를 역순으로 정렬해 주기 위해 reserved 함수를 사용해 보겠습니다.

func solution(_ n:Int64) -> [Int] {
    String(123).reversed())  // ReversedCollection<String>(_base: "123")
    return []
}

 

이때의 출력값은 ReversedCollection<String>(_base: "123")라고 뜨네요.

 

reserved 함수를 사용하기 위해서는 String으로 타입 변환을 해 주어야 합니다.

func solution(_ n:Int64) -> [Int] {
    print(String(String(123).reversed()))	// 출력값 321
    return []
}

String으로 한번 더 감싸 주었을 경우, 출력값이 321로 나오는 것을 알 수 있습니다.

 


sort & sorted

sort와 sorted의 차이점을 알아보겠습니다.

 

sort의 경우 원본 배열으로 정렬을 합니다. 기본적으로 오름차순으로 정렬합니다.

var array = [1, 2, 3, 4, 5]
array.sort() // default는 오름차순으로 정렬
print(array) // [1, 2, 3, 4, 5]

var array = [1, 2, 3, 4, 5]
array.sort(by: >) // 내림차 정렬
print(array) // [5, 4, 3, 2, 1]

내림차순으로 정렬하고 싶을 경우, sort(by: (Int, Int) throws -> Bool) 함수를 사용하면 됩니다.

 

sorted는 원본 배열은 그대로 두면서, 사본을 만들어 오름차순으로 정렬을 합니다.

 

var array = [5, 4, 3, 2]
var newArray = array.sorted()
    
print(array)    // 5, 4, 3, 2
print(newArray) // 2, 3, 4, 5

sorted 함수를 사용하여 사본 배열이 만들어졌고, 기존 배열에는 영향을 주지 않기 때문에

array는 기존 배열의 값이 나오고, newArray에는 정렬된 배열의 값이 나오게 됩니다.

 

그렇다면 이 둘의 차이점은 무엇일까요?

 

바로 메모리의 차이입니다.

sorted 같은 경우는 사본 배열을 하나 만들게 되기 때문에 그만큼의 메모리를 sort보다 두 배로 사용하게 됩니다.

지금은 크기가 작은 배열만을 사용하여서 큰 문제가 없을 수도 있지만,

배열의 크기가 큰 경우에는 문제가 될 수도 있습니다.

 

메모리를 관리하기 위해서는 sort를 사용하는 것을 권장하지만,

기존 배열에 영향을 주지 않아야 하는 상황이라면 sorted를 사용하는 것이 맞겠네요.

Comments