알고리즘 문제 풀이를 위한 Swift 요약 정리
- 알고리즘 문제를 Swift로 풀면서 알게된 것을 정리하는 노트입니다.
- 새로운 내용은 이 포스트에 계속 업데이트됩니다.
배열
배열 선언과 동시에 초기화
// 1차원 배열
var arr = [Int]()
var arr: Array<Int> = []
var arr: [Int] = []
// 2차원 배열
var arr4 = [[Int]]()
원소와 크기를 지정해서 배열 만들기
var arr = Array(repeating: 1, count: 5) // [1,1,1,1,1]
범위값으로 배열 만들기
var arr = Array(1...3)
배열 정렬
var arr = [1,3,2]
// sort() - 배열이 정렬됨. (원본의 순서 변경)
// sorted() - 배열을 정렬한 배열을 반환. (원본은 변겅없음)
arr.sort() // 오름차순 [1,2,3]
arr.sort(by: >) // 내림차순 [3,2,1]
배열 다루기
var arr = [1,2,3,4,5]
// 인덱스로 원소 찾기
arr[2] // 3
// 원소로 인덱스 찾기 (옵셔널)
arr.firstIndex(of: 3)! // 2
// 인덱스로 원소 지우기
arr.remove(at: 2) // [1,2,3,5]
// 맨 뒤에 새 원소 추가
arr.append(6) // [1,2,3,5,6]
// 맨 뒤 원소 지우고 반환 (옵셔널 아님 - 배열이 비어있으면 않됨)
arr.removeLast() // [1,2,3,5]
// 특정 인덱스에 원소 넣기
arr.insert(3, at: 2) // [1,2,3,4,5]
// 특정 원소 있는지 확인
arr.contains(3) // true
// 순서 반전
arr.reverse() // [5,4,3,2,1]
// 첫 원소 지우고 반환
arr.removeFirst()
// 첫 원소 반환 (옵셔널)
arr.first!
// 마지막 원소 지우고반환 (옵셔널 - 배열이 비어있으면 nil 반환)
arr.popLast()!
// 마지막 원소 반환 (옵셔널)
arr.last!
// 원소의 최대값, 최소값 (옵셔널)
var min = arr.min()! // 1
var max = arr.max()! // 5
// 모든 원소 지우기
arr.removeAll()
// 조건을 만족하는 모든 원소 지우기
arr.removeAll(where: {$0 % 2 == 0})
//arr.removeAll{$0 % 2 == 0} // 위 코드 함축
// 원소 스왑
arr.swapAt(_:, _:)
map
모든 원소에 적용
var arrStr = ["1", "2", "3"]
var arrInt = arrStr.map { Int($0)! } // [1,2,3] 원소를 모두 Int형으로 변환
filter
조건식에 참인 원소만 필터링
var arr = [1,2,3,4,5]
var arrEven = arr.filter { $0 % 2 == 0 } // [2, 4]
var arrOdd = arr.filter { $0 % 2 == 1 } // [1, 3, 5]
reduce
var arr = [1, 2, 3]
arr.reduce(0, +) // 6 // 모든 원소 더하기 (0은 초기값)
arr.reduce(0, -) // -6 // 모든 원소 빼기
배열 순회하기
순회하며 원소 참조
var arr = [1,2,3]
for n in arr {
print(n)
}
순회하며 원소와 인덱스 참조 - enumerated()
for (index, value) in arr.enumerated() {
print("\(index), \(value)")
}
인덱스로 순회
var arr = [1, 2, 3]
// count 사용
for i in 0..<arr.count {
print(arr[i])
}
// indices 사용
for i in arr.indices {
print(arr[i])
}
역순으로 순회
var arr = [1, 2, 3]
for i in (0..<arr.count).reversed() {
print(arr[i])
}
for i in arr.indices.reversed() {
print(arr[i])
}
배열 거꾸로 출력 - revesed()
var arr = [1, 2, 3]
var arrReversed = arr.reversed()
// 순회 참조 가능
for n in arrReversed {
print(n)
}
//arrReversed[0] // 직접 참조 불가
var arr = [1, 2, 3]
arr.reverse() // 배열 자체를 거꾸로 만들면
// 순회 참조 가능
for n in arr {
print(n)
}
arr[0] // 직접 참조 가능
문자열
특정 문자 기준으로 분리하기 - split()
var str = "Hello Wolrd! Swift"
var strings = str.split(separator: " ") // 공백 기준으로 분리
print(strings) // ["Hello", "World!", "Swift"]
문자열 배열을 하나의 문자열로 합치기 - joined()
let arrHello = ["Hello", "World", "!"]
var hello = arrHello.joined() // "HelloWorld!"
hello = arrHello.joined(separator: " ") // Hello World !
hello = arrHello.joined(separator: ", ") // Hello, World, !
대/소문자 변경 - capitalized, uppercased(), lowercased()
var str = "abcdef"
str = str.capitalized // 첫번째만 대문자로 변경 "Abcdef"
str = str.uppercased() // 전체 대문자로 변경 "ABCDEF"
str = str.lowercased() // 전체 소문자로 변경 "abcdef
문자열 포함 체크 - contains()
var str = "abcdef"
str.contains("a") // true
str.contains("ab") // true
str.contains("cd") // true
str.contains("ac") // false
특정 문자를 다른 문자로 변경한 문자열 반환
var str2 = str.replacingOccurrences(of: "a", with: "b")
print(str) // 원본에 영향 없음
print(str2) // bbcdef
String 인덱스 다루기
var str = "abcdef"
// 문자열 원소 접근
//str[0] // 직접 접근 않됨. String 인덱스로 접근해야함
str[str.startIndex] // "a"
// 3번째 문자 가져오기
let index = str.index(str.startIndex, offsetBy: 3 - 1)
str[index] // "c"
// 일정 범위의 문자열만 가져오기
let sub = str[str.startIndex...index] // "abc"
// 특정 원소의 인덱스
str.firstIndex(of: "c")
비트 연산
2진수로 변환했을 때 1의 갯수
let n: Int8 = 25 // 0b0001_1001
n.nonzeroBitCount // 3
수학
제곱근 - sqrt()
// Double형 입력받아 Double형 반환
sqrt(4.0) // 2.0
거듭제곱 - pow()
// Double형 입력받아 Double형 반환
pow(2.0, 3.0) // 8.0 // 2의 3승, 2^3
Leave a comment