Swift Algorithms (9) - Doubly Linked Lists
Doubly Linked List — class가 필요한 진짜 이유 새 프로젝트(멀티플랫폼 앱, landscape 고정)로 시작해서, 제네릭 doubly linked list를 구현한다. 왜 struct가 아니라 class인가 class DoublyLinkedListNode<T> { var value: T var pr...
Doubly Linked List — class가 필요한 진짜 이유 새 프로젝트(멀티플랫폼 앱, landscape 고정)로 시작해서, 제네릭 doubly linked list를 구현한다. 왜 struct가 아니라 class인가 class DoublyLinkedListNode<T> { var value: T var pr...
Part 6: Memoization — 재귀의 비효율을 실측으로 확인하기 Recursion은 종종 값비싼 연산이다. Memoization은 이전에 계산한 결과를 일종의 메모장(캐시)에 저장해뒀다가, 같은 계산이 다시 필요할 때 재사용해서 성능을 크게 끌어올리는 기법이다. 전형적인 예시가 Fibonacci 수열이고, 여기서는 그 확장판인 four-bo...
Part 5: Recursion 시작하기 Recursion(재귀)을 다루는 새 섹션이다. 재귀 함수는 자기 자신을 호출하는 정의를 가진 함수이고, 언젠가 멈추게 만드는 조건(base case)이 반드시 있어야 한다. 전형적인 예가 factorial이다. 반복문으로 짜면 n! = 1 × 2 × 3 × ... × n이지만, 재귀적으로 정의하면 이렇다....
Part 4 시작: Dictionary로 문자 빈도 세기 새 주제인 Dictionary를 다룬다. 첫 문제는 문자열 text가 주어졌을 때 가장 자주 등장하는 문자를 반환하는 mostPopularCharacter다. 빈도가 같으면(tie) ASCII 값이 더 작은 문자를 반환한다. 대문자와 소문자는 다른 문자로 취급한다('A' < 'a'). ...
Part 3: 함수형(Swifty) 스타일로 다시 풀기 Part 2에서 명령형(imperative) 스타일로 풀었던 문제들을, filter/map/reduce/forEach 같은 함수형 도구를 써서 다시 풀어본다. firstDivisibleSwifty: filter + first 먼저 firstDivisible부터(이름에 있던 오타 first...
Part 2: firstDivisible 챌린지 part2Problems라는 새 struct에 함수들을 모은다. 문제: 양의 정수로 이루어진 배열 lst와 양의 정수 a가 주어졌을 때, lst에서 a로 나누어떨어지는 첫 번째 원소의 인덱스를 반환한다. 그런 원소가 없으면 nil을 반환한다. a는 항상 양수지만, lst는 빈 배열일 수도 있다. ...
첫 번째 Unit Test 작성하기: XCTest 시작하기 이제 지금까지 만든 part1Problems의 함수들을 실제로 테스트해본다. hello 함수부터 시작한다. Unit Test 파일 만들기 Xcode에서 File → New로 새 파일을 만들 때 “test”로 검색하면 여러 템플릿이 뜨는데, UI Test가 아니라 Unit Test를 선...
문제 풀이 워밍업: Trapezoid(사다리꼴) Playground에서 실제로 문제를 풀어보면서 몸을 푸는 첫 번째 예제다. 사다리꼴 ABCD의 네 변(AB, BC, DC, AD)의 길이와 넓이(area)가 주어졌을 때, 둘레(circumference)와 중간선(mid-segment) 길이, 높이(height)를 계산해서 반환하는 함수를 만든다. ...
Generic Function: swap 함수로 시작하기 두 값을 swap하는 함수부터 만들어보면서 generics가 왜 필요한지 살펴본다. 두 값을 swap하는 함수 만들기 정수 두 개를 swap하는 함수부터 만든다. func swap(_ a: Int, _ b: Int) { let temp = a a = b b = t...
Create ML로 텍스트 분류기 만들기 이번 섹션에서는 코드로 Create ML을 써서 텍스트 분류기 모델을 만든다. 분류기는 레이블이 붙은 텍스트 데이터로 학습시켜야 하는데, Create ML은 JSON이나 CSV 파일로 된 학습 데이터를 쓸 수도 있고, 앞서 이미지 분류기에서 썼던 것처럼 레이블별로 폴더를 나눈 구조를 쓸 수도 있다. 후자는 텍...