[iOS-Swift] 스위프트에서 문자열 뒤집기 + reduce

TIL 17일 차 - Swift에서 문자열 뒤집기

 

1. 가장 기본적인 방법 (한 줄 풀이)

let str = "HelloSwift"
let reversedStr = String(str.reversed())
print(reversedStr)

reversed()로 뒤집은 뒤에 String()으로 다시 감싸는 이유는 reversed()로 뒤집으면 ReversedCollection 형태로 반환되기 때문에 String()으로 감싸줘야 한다.

 

 

2. 함수로 만들기 (코딩테스트용)

func reverseString(_ s: String) -> String {
    return String(s.reversed())
} // 1번과 같은 이유로 String()으로 감싼 후 return

 

 

3. reduce로 뒤집기

let str = "hello"
let reversed = str.reduce("") { String($1) + $0 }
print(reversed) // "olleh" 출력
// 앞에서 하나씩 꺼내서 앞에 붙여버리는 방식

 

먼저 reduce는 대체 뭘까?

reduce(초기값) { 누적값, 현재값 in
	새로운 누적값
}

처음에 이 초기값부터 시작해서 하나씩 돌면서 계속 값을 누적하라는 뜻

 

따라서 아까 썼던 reduce문을 해석해 보자면

시작값: "" -> 아직 아무 글자 없음

$0 -> 지금까지 만들어진 문자열

$1 -> 이번에 꺼낸 문자

 

<첫 번째 문자 'h'>

$0 = "" -> 지금까지 결과

$1 = "h" -> 현재 문자

result = "h"

 

<두 번째 문자 'e'>

$0 = "h"

$1 = "e"

result = "eh"

.

.

.

<다섯 번째 문자 'o'>

$0 = "o"

$1 = "lleh"

result = "olleh"

 

하지만 reduce 방식은 성능이 안 좋아 비추한다.

 

 

4. 직접 구현 (문자열 구조 이해용)

func reverseManually(_ s: String) -> String {
    var result = ""
    for char in s {
        result = String(char) + result
    }
    return result
}

로직을 이해하기에는 좋지만 실수/코테에서는 비추한다.