
퀵 정렬은 pivot을 기준으로 큰 숫자와 작은 숫자를 나누어줍니다. 코드를 살펴봅시다. pivot을 array의 중간인 array.count / 2로 잡아주고 less는 pivot보다 작은 것 equal은 pivot이랑 같은 것 greater은 pivot보다 큰 것들로 나누어줍니다. 각 less, equal, greater은 스위프트의 고차함수filter를 사용해줍니다. 간단하게 나뉘는 흐름을 살펴봅니다. array의 count가 1보다 작으면 return해주고 less, equal, greater을 분리하면 최종적으로 정렬된 배열을 얻을 수 있습니다. 단점은 피봇 값에 따라 편향되게 분할될 가능성도 있습니다. 예를들어 이미 정렬할 데이터가 정렬되어 있거나 역으로 정렬되어 있는경우 피봇이 한쪽으로 치우..

병합 정렬은 반으로 나누고 합치면서 정렬합니다. 코드를 살펴봅시다. 위 코드에서 mergeSort 함수는 반으로 나누는 역할을 하며 merge함수는 합치는 역할을 합니다. 큰 흐름을 살펴보면 mergeSort함수를 통해 중간 인덱스를 잡고 왼쪽 오른쪽으로 나눕니다. 나눈 배열을 재귀로 다시 mergeSort로 넘깁니다. 그리고 배열의 길이가 1이면 리턴하게 됩니다. 그럼 배열 count가 1이 될 때까지 나누어지겠죠. 이후 나뉜 배열에 대해서 merge가 실행됩니다. merge가 실행되는 순서는 위와 같습니다. [1][5]에서 처음 merge가 실행되며 [4][1,5]에서 두 번째 merge가 실행되며 [3][6]에서 세 번째 merge가 실행되며 [2][7]에서 네 번째 merge가 실행되며 [3,6]..

버블 정렬은 옆에 있는 값과 비교해서 정렬하는 알고리즘입니다. 버블 정렬은 계속해서 옆 원소랑 비교하며 정렬합니다. 또한 한 번의 external for loop가 끝났을 때 가장 큰 값이 맨뒤로 갑니다. 코드를 살펴봅시다. arr는 우리가 정렬해야 할 배열이며, 1부터 7까지 정렬되지 않은 상태로 존재합니다. arr의 크기는 7이고 인덱스는 0부터 6까지 입니다. external for loop는 6부터 시작해서 아래로 내려오며, internal for loop는 0부터 external의 i까지 올라가며 비교하며 정렬하기 위함입니다. 차근차근 살펴봅시다. external for loop의 i값은 6이며 internal for loop의 j값은 0부터 5까지 실행됩니다. j가 0인 경우를 살펴봅시다. a..

삽입 정렬은 적절한 인덱스에 삽입해주는 정렬입니다. 삽입 정렬은 두 번째 원소부터 시작해서 그 앞의 원소들과 비교해 삽입할 위치를 지정한 후, 지정한 자리에 원소를 삽입해 정렬합니다. 또한 앞에 있는 원소는 이미 정렬되어 있다고 가정합니다. 코드를 살펴봅시다. arr는 우리가 정렬해야 할 배열이며, 1부터 7까지 정렬되지 않은 상태로 존재합니다. arr의 크기는 7이고 인덱스는 0부터 6까지 입니다. 두 번째 원소부터 시작한다 했으니 for문은 인덱스 1부터 6까지 돌기 위한 용도이며, while문은 for문의 i보다 아래 인덱스 중 큰 값이 있으면 swap하기 위한 용도입니다. y는 아래 인덱스까지 모두 탐색하기 위한 변수입니다. 그럼 차근차근 살펴봅시다. for loop에서 i가 1일 때 y가 1인 ..

선택 정렬은 가장 작은 값을 찾아서 앞으로 보내주는 정렬입니다. 첫 번째 원소를 두 번째 원소부터 마지막 원소까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 원소를 세 번째 원소부터 마지막 원소와 차례대로 비교하여 그중 가장 작은 값을 찾아 두번째 위치에 놓는 과정을 반복합니다. + 선택정렬을 코드로 작성할 때는 가장 작은 값을 찾기 위한 min값이 있어야합니다. 코드를 살펴봅시다. arr는 우리가 정렬해야 할 배열이며, 1부터 7까지 정렬되지 않은 상태로 존재합니다. arr의 크기는 7이고 인덱스는 0부터 6까지 입니다. (external for loop) 외부에 있는 for 루프는 최솟값이 놓일 인덱스를 위해 사용합니다. (internal for loop) 내부에 있는 for ..

애드몹을 통해 모바일에 광고를 달 수 있습니다. 기존에 존재했던 프로젝트에 구글 애드몹을 적용해봤습니다. 먼저 구글 애드몹에 들어가셔서 https://apps.admob.com/v2/home 앱 추가를 해줍니다. 그러면 아래와 같은 화면이 나올 거예요. 본인이 앱 스토어에 등록하셨으면 예 아니면 아니요를 눌러주세요. 저는 이미 등록한 프로젝트에 적용한 거라 예를 눌렀습니다. 앱 이름이나 개발자 이름 또는 앱 ID로 검색하면 프로젝트가 뜹니다. 원하는 프로젝트를 추가해주세요. 앱을 추가해주면 앱 ID가 생성됩니다. 여기서 생성된 앱 ID를 어디에 복사해놔 주세요. 이거 필요해요. 애드몹을 실행하려면 앱의 소스코드와 info.plist파일에 추가해줘야 합니다. 다음 단계로 광고 단위를 만들어 줍니다. 여기서..

디스패치 세마포어를 알아보기 전에 세마포어는 무엇일까요? 세마포어는 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것입니다. 뮤텍스는 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것입니다. 또한 세마포어는 뮤텍스가 될 수 있습니다. (그 반대는 불가합니다.) 이제 디스패치 프레임워크 내에 있는 디스패치 세마포어 클래스에 대해서 알아보겠습니다. 디스패치 세마포어를 사용하게 된 계기는 async한 작업을 sync하게 변경시켜보는 시도에 세마포어를 사용하면 어떨까 싶었고, 한 번도 사용해보지 못했던 클래스라 궁금했었기에 사용해봤습니다. 그럼 애플에서 제공하는 공식문서를 살펴봅시다. 디스패치 세마포어란 다중 실행 콘텍스트에서 자원 접근을 제어하는 객체입니다. 디스패치 세마포어는 전통적..

수요일에 받은 코드 리뷰를 통해 좋은 말씀들을 많이 해주셔서 하나씩 학습해 정리해보려 합니다. 그중에서도 제네릭과 프로토콜을 활용해 dequeueReusableCell을 어떻게 처리하는지 알아보았습니다. 먼저 테이블 뷰에 테이블 뷰 셀을 나타내게 하려면 어떻게 하시나요. 테이블 뷰는 데이터 자체를 관리하지는 않고, 표현되는 데이터만 관리합니다. 그래서 우리는 UITableViewDataSource를 채택해 필수 메소드를 적어줍니다. 이 친구들이 관리를 합니다. 아래는 UITableViewDataSource에 필수 메소드를 작성한 코드입니다. // Return the number of rows for the table. override func tableView(_ tableView: UITableView..
- Total
- Today
- Yesterday
- 책 후기
- objc
- objective-c
- iOS SwiftUI
- swift5
- swiftUI
- 스위프트UI
- 책 추천
- Algorithm
- 애니메이션
- 알고리즘
- 머신러닝
- rxswift
- Animation
- stanford SwiftUI
- RX
- leetcode
- string
- ios
- 독서
- 딥러닝
- Deep learning
- Xcode
- ARC
- 문자열
- 책
- wwdc
- SWIFT
- 스위프트
- ReactiveX
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |