[Swift] 코테 기초 정리 / 기초적인 고차 함수 정리 / 라이브러리 함수 정리 / 스위프트 코테에서 알아두면 좋은 라이브러리 함수들 정리

2023. 5. 19. 17:27🍏/Swift

이번 포스팅은 입문보다는 어느 정도 Swift 고차 함수(Higher-order functions)에 대한 이해가 있어야 쉽게 보실 수 있습니다.

초심자를 위한 swift ps는 바로 밑에 링크에 들어가시면 있습니다. 도움이 되셨으면 좋겠습니다.

 

[Swift]Swift 요약 정리 /초보자를 위한 코테 / 코딩테스트 / 요약 / 총ㅈ 정리 / 기초 정리 / 코테 입문

알고리즘 코딩 테스트를 위한 Swift 요약 정리 입력(Input) Line 단위로 읽어오기. 1 let value = readLine() Line단위로 읽어오는데, 공백(Space)으로 구분되어 있는 입력 ex) Input = 1 2 3 4 1 2 let nums = readLine()!.spl

chanhhh.tistory.com

 

 


Extension String indexing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// MARK: - String subscript indexing
// ex) str[2]
 
extension String {
    subscript(_ index: Int-> Character {
        return self[self.index(self.startIndex, offsetBy: index)]
    }
}
 
// MARK: - subscript range indexing to String
// ex) str[0...5]
 
extension String {
    subscript(_ range: Range<Int>-> String {
        let fromIndex = self.index(self.startIndex, offsetBy: range.startIndex)
        let toIndex = self.index(self.startIndex,offsetBy: range.endIndex)
        return String(self[fromIndex..<toIndex])
    }
}
 
 

 


map

1
2
3
4
5
6
7
func solution(_ arr:[Int]) -> [Int] {
    return arr.map { 
        if $0 % 2 == 0 && 50 <= $0 { return $0 / 2 }
        if $0 % 2 != 0 && 50 > $0 { return $0 * 2 }
        return $0
    }
}
 
 

 

enumerated, map

1
2
3
4
5
6
7
8
// 홀수번째 인덱스의 문자열은 모든 문자를 대문자
// 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환
func solution(_ strArr:[String]) -> [String] {
    strArr.enumerated().map{
        if $0.0 % 2 == 0 { return $0.1.lowercased() }
        else { return $0.1.uppercased() }
    }
}
 
 

 

stride, map

1
2
3
4
// 정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return
func solution(_ n:Int, _ k:Int-> [Int] {
    return stride(from: k, through: n, by: k).map { $0 } // Array(stride(from: k, through: n, by: k))
}
 

 


filter

1
2
3
4
5
func solution(_ num_list:[Int]) -> Int {
    let even = Int(num_list.filter { $0 % 2 == 0 }.map { String($0) }.joined())!
    let odd = Int(num_list.filter { $0 % 2 != 0 }.map { String($0) }.joined())!
    return even + odd
}
 

enumerated, filter

1
2
3
//정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 
//마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return
func solution(_ nl:[Int], _ n:Int-> [Int] {nl.enumerated().filter{$0.0%n==0}.map{$0.1}}
 

 

배열에서 중복되지 않은 수 찾기.

1
2
3
// 한 배열안에 중복되지 않은 숫자를 filter를 활용하여 찾아내기
var c = [133]
let chan = c.filter { n in c.filter { $0 == n }.count == 1 } 
 

 

 


문자열 치환(대치)

1
2
3
4
func solution(_ my_string:String, _ alp:String-> String {
// alp 라는 소문자를 my_string에서 찾아서 전부 대문자로 바꾸는 코드
    return my_string.replacingOccurrences(of:alp, with:alp.uppercased())
}
 
 

- 문제: numbers를 첫번째 인덱스부터 합하다가 n보다 커지게 되면 합을 중지한다.

reduce의 두번째 파라미터는 _ nextPartialResult: (Result, Self.Element) throws -> Result 이다.

-> 누적 값과 시퀀스의 요소를 새로운 누적 값으로 결합하는 클로저로, nextPartialResult 클로저의 다음 호출에서 사용되거나 호출자에게 반환됩니다.

1
func solution(_ numbers:[Int], _ n:Int-> Int { numbers.reduce(0) { $0 > n ? $0 : $0 + $1 } }
 

 

for문에 where 절로 조건을 걸 수 있다.

1
2
3
4
5
func solution(_ numbers:[Int], _ n:Int-> Int {
    var answer = 0
    for number in numbers where answer <= n { answer += number }
    return answer
}
 

 


firstIndex(where:) 로 처음으로 나오는 음수의 value의 값을 걸러내기 만약에 음수 원소가 없다면 -1 반환

1
2
func solution(_ arr: [Int]) -> Int { arr.firstIndex(where: { $0 < 0 }) ?? -1 }
 
 
 

 


String 대/소 문자 전환하기 

1
2
func solution(_ str:String-> String { str.lowercased() }
func solution(_ str:String-> String { str.uppercased() }
 

hasPrefix

1
func solution(_ m:String, _ p:String-> Int {m.hasPrefix(p) ? 1:0}
 

Int의 string 처리

1
func solution(_ a: Int, _ b: Int-> Int { max(Int("\(a)\(b)")!Int("\(b)\(a)")!) }
 

s1에 ex가 포함되면 포함시키지 않는 배열

1
2
3
4
5
6
7
8
9
10
11
import Foundation
// 꼬리 문자열
func solution(_ sl:[String], _ ex:String-> String {
    sl.map{
        if $0.contains(ex) { return "" }
        return $0
    }.joined() 
}
return str_list.reduce("") { $0 + ($1.contains(ex) ? "" : $1) }
return str_list.filter { !$0.contains(ex) }.joined()
 
 
 

'🍏 > Swift' 카테고리의 다른 글

[Swift] Libraries, Frameworks, Swift Packages  (0) 2024.02.01
[Framework] WebKit  (0) 2023.08.18
[Swift] Some / Any  (0) 2023.04.15
[Swift] NamingConvention / 명명 규약  (0) 2023.04.04
[Swift] Understanding Swift Performance / WWDC 16  (0) 2023.03.09