Swift Algorithms (6) - Dictionaries
Part 4 시작: Dictionary로 문자 빈도 세기 새 주제인 Dictionary를 다룬다. 첫 문제는 문자열 text가 주어졌을 때 가장 자주 등장하는 문자를 반환하는 mostPopularCharacter다. 빈도가 같으면(tie) ASCII 값이 더 작은 문자를 반환한다. 대문자와 소문자는 다른 문자로 취급한다('A' < 'a'). ...
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 파일로 된 학습 데이터를 쓸 수도 있고, 앞서 이미지 분류기에서 썼던 것처럼 레이블별로 폴더를 나눈 구조를 쓸 수도 있다. 후자는 텍...
Vision Framework 시작하기 Vision framework는 컴퓨터 비전 작업에 특화되어 있다. 정지 이미지에서의 얼굴 추적, 얼굴 감지, 텍스트 감지, 모양 감지, 바코드 감지 등을 포함한다. 이 섹션에서는 몇 가지 iOS 앱을 만들어보면서 이 기능들을 직접 살펴본다. 이미지에서 사각형 영역을 감지하는 rectangle detec...
Natural Language Framework로 언어 감지하기 Natural Language framework는 텍스트를 자연스럽게 분석하는 기능을 제공한다. Hidden Markov Model이나 word embedding, deep neural network 같은 개념을 몰라도, 이런 자연어 처리 기능을 앱에 그대로 가져다 쓸 수 있다. 이 ...
Machine Learning이란 머신러닝은 새로운 개념이 아니다. 1959년 인공지능 초기 선구자인 Arthur Samuel이 처음 소개한 용어로, “컴퓨터가 명시적으로 프로그래밍되지 않고도 학습할 수 있는 능력을 부여하는 학문 분야”라고 정의했다. 계속 코드를 다시 써줘서가 아니라, 경험을 통해 스스로 작업을 더 잘하게 되는 것을 학습이라고 본 ...