Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 옵셔널 체이닝
- Git
- Threading
- 열거형
- TableView
- switch
- 기본문법
- 직장인자기계발
- SeSAC
- cancelAsyncWrite
- 직장인인강
- RawValue
- ios
- 함수
- userDefaults
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- 독학
- 패스트캠퍼스
- 인스펙터
- Optional Chaining
- Background
- enum
- xcode
- beginAsyncWrite
- Realm
- 패스트캠퍼스후기
- 패캠챌린지
- 프로퍼티 관찰자
- 문자열 보간법
- swift
Archives
- Today
- Total
아삭아삭 iOS 개발
Swift 알고리즘에 자주 쓰이는 기초 문법 정리 본문
매번 구글링하기 귀찮은 내용들 정리합니다~~
지속적인 업데이트 예정
입력받기 & 쪼개기
▶ 키보드 입력받기
- readLine()의 리턴값 타입은 Optional String
let value = readLine()
- Int형 한 개의 숫자 입력 받기
var num = Int(readLine()!)!
▶ 키보드로 입력받은 값, 공백으로 구분하기
- split()으로 쪼개는 방법
- split은 Foundation 없이도 사용 가능 (swift 기본 instance method이기 때문)
- 리턴값의 타입은 [String.Sequence]
- 그래서 split 사용해서 쪼갤 경우 바로 String으로 사용 불가
(그래도 map을 사용하면 되니 import없는 split을 쓰기도 함)
let nums = readLine()!.split(seperator:" ") // ["도", "레", "미", "파"]
- component()로 쪼개는 방법
- Foundation import 필요 (component는 Foundation에 들어있는 instance method임)
- 리턴값의 타입은 [String]
- 용량이 늘어날 수도 있음
let nums = readLine()!.components(seperatedBy:" ") // ["도", "레", "미", "파"]
▶ 공백없는 숫자를 배열로 입력받기
- Int($0)! 보다 Int(String($0))! 이 속도가 더 빠름
var nums = Array(readLine()!).map {Int(String($0))!}
var nums = Array(numbers).map {String($0)}
String, Substring 다루기
Index 다루기
Array 다루기
- 생성하기
// 빈배열
var arr : Array<Int> = []
var arr : [Int] = []
var arr = [Int]()
// 크기가 정해진 배열
var arr = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]
var arr = [Int](repeating: 9, count: 5) // [9, 9, 9, 9, 9]
// 데이터 넣어서 배열생성
var arr = Array(1...99) // [1,2,...,98, 99]
// 2차원 배열
let matrix = [[Int]]()
// []
let arr: [[Int]] = Array(repeating: Array(repeating: 0, count: 4), count: 3)
// [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ]
arr[1][3] // [0]
let arr = [[Int]](repeating: [Int](repeating: 0, count: 4), count: 3)
// [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ]
let arr = Array(repeating: [Int](), count: 3)
// [[], [], []]
- sort하기
// 오름차순 (deault)
arr.sort()
arr.sort(by: <)
arr.sorted()
arr.sorted(by: <)
// 내림차순
arr.sort(by: >)
arr.sorted(by: >)
- 출력하기
var arr = [1, 3, 5, 7, 9]
arr.reverse()
// [9, 7, 5, 3, 1]
var arr = [1, 3, 5, 7, 9]
var rarr = arr.reversed()
// ReversedCollection<Array<Int>>(_base: [1, 3, 5, 7, 9])
// 타입주의!!
- 특정 요소 count
let arr = ["가", "나", "다", "가", "마", "가"]
apb.filter { $0 == "가" }.count // 3
- 각 요소 count
let arr = ["A", "B", "C", "D", "A", "A", "B", "D]
var count = [String: Int]()
arr.forEach { counter[$0, default: 0] += 1 }
print(count) // ["A": 3, "B": 2, "C": 1, "D": 2]
- 고차함수 적용하기 (map, filter, reduce)
1) map
var arr = ["1", "3", "5", "7", "9"]
arr.map { Double($0)! } // [1.0, 3.0, 5.0, 7.0, 9.0]
var lunchMenu = ["연어포케": "a", "바질파스타": "b", "추어탕": "c", "타코보울": "d"]
lunchMenu.map { $0.0 } // ["연어포케", "바질파스타", "타코보울", "추어탕"]
lunchMenu.map { $0.1 } // ["a", "b", "d", "c"]
var arr: Set<Int> = [1, 3, 5, 7, 9]
arr.map { $0 * 3 } // [27, 15, 9, 21, 3] 순서가 없다는게 포인트
var degree = 9...15
degree.map { $0 * 2 } // [18, 20, 22, 24, 26, 28, 30]
2) filter
var arr = Array(1...30)
arr.filter { $0 % 10 == 0 } // [10, 20, 30]
3) reduce
- reduce(_:_)는 Int, String같은 단일 값을 받아서 작업 후, 단일 값으로 결과를 얻음
let arr = ["Fly", "Me", "to", "the", "Moon"]
arr.reduce("Playing MUsic : ") { $0 + " " + $1 } // Playing MUsic : Fly Me to the Moon
var arr = [1, 3, 5, 7, 9]
arr5.reduce(0, +) // 25
- reduce(intro:_)는 Array, Dictionary 타입을 결과로 얻고자 할 때 사용
let letters: String = "oldtownroad"
let dictionary: [Character: Int] = letters.reduce(into: [:]) { counts, letter in
counts[letter, default: 0] += 1
}
// ["l": 1, "a": 1, "w": 1, "d": 2, "r": 1, "o": 3, "t": 1, "n": 1]
Dictionary 다루기
- 생성하기
- 삭제하기
- 추가하기
- 수정하기
- 읽기
- sort하기
- 반복에 적용하기