APFS(Apple File System 파일 시스템은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제입니다. APFS는 기존 iOS에서의 파일 시스템인 HFS+를 대체하는 파일시스템으로, macOS 10.13 High Sierra, iOS 10.3, watchOS, tvOS에서 범용적으로 사용하는 파일 시스템입니다. APFS의 장점 1. 컨테이너 방법을 사용하여, 컨테이너 내의 파티션 용량을 동적으로 할당합니다. 이전의 HFS+에서는 전체 사용할 수 있는 용량이 100이라면 50의 용량을 차지하는 프로세스가 추가적인 메모리를 필요로 할 때 재할당을 해주어야 했지만, APFS에서는 이를 컨테이너 방법을 통해 동적으로 할당하여 파일 시스템을 관리하게 더욱 용이해졌습니다...
분류 전체보기
배경 예를 들어 배열 x의 원소 수가 13이고, 그 안에 오름차순으로 정렬된 10개의 데이터가 저장되어 있다고 가정해보겠습니다. [5, 6, 14, 20, 29, 34, 37, 51, 69, 75] 이 배열에서 35를 추가한다면 과정은 다음과 같습니다. ① x[5], x[6] 사이에 값이 추가되도록 이진 검색법으로 검사 ② x[6] 이후의 모든 원소를 한 칸씩 뒤로 이동 ③ x[6]에 35 대입 원소가 이동하는데 필요한 복잡도는 O(n)이고, 비효율적입니다. 해시법 해시법은 해시값을 통해 추가·삭제가 자주 일어나는 데이터 집합에서 아주 빠른 검색을 수행하는 알고리즘입니다. 해시값은 배열의 원소들을 총 원소 개수로 나눈 나머지입니다. 이 해시값은 데이터에 접근할 때 기준이 됩니다. 위 예시라면 배열 x의 ..
이진 검색 배열의 데이터가 정렬 되었을 때 배열의 첫번째 원소부터 하나씩 스캔하는 선형 검색보다 빠르게 검색할 수 있는 알고리즘입니다. 즉, 원소가 오름차순이나 내림차순으로 정렬된 배열에서 좀 더 효율적으로 검색할 수 있습니다. n개의 원소가 오름차순으로 정렬된 배열 seq에서 이진 검색하는 알고리즘은 검색 범위의 맨 앞(pl), 맨 끝(pr), 중앙의 인덱스(pc)를 활용하여 검색합니다. 검색할 키 값이 정렬된 배열의 중앙 값을 기준으로 앞 혹은 뒤인지를 반복문 안에서 인덱스 변수 값을 갱신해나가며 키 값을 찾을 때까지 검색해나가는 것입니다. 예를 들어 seq = [5, 7, 10, 12, 14, 16, 20] 배열에서 이진 검색 알고리즘을 토대로 키 값 16을 검색하겠습니다. 이때 pl = 0, pr..
검색 알고리즘 검색은 어떤 조건을 만족하는 데이터를 찾아내는 과정입니다. 알고리즘에는 배열 검색, 연결 리스트 검색, 이진 검색 트리 검색 등 다양한 검색 알고리즘이 있습니다. 선택할 수 있는 알고리즘은 다양하지만, 단순히 계산 시간이 빠르다고 해서 좋은 알고리즘은 아닙니다. 검색 처리 시간뿐만 아니라 데이터의 추가·삭제 등 이외 작업들에 대한 비용을 종합 평가하여 적절한 알고리즘을 선택해야합니다. 하여 이번 포스팅에서는 구체적으로 다음 세 가지 배열 검색 알고리즘 중 선형 검색 알고리즘에 대해 공부하고자 합니다. ① 선형 검색: 무작위로 늘어놓은(원소의 값이 정렬되지 않은) 데이터 집합에서 검색을 수행 ② 이진 검색: 일정한 규칙으로 늘어놓은(원소의 값이 정렬된) 데이터 집합에서 아주 빠른 검색 수행 ..
준비물 탈옥(jailbreak) 프로그램과 프로그램에서 지원하는 ios 버전이 설치된 아이폰이 필요합니다. 왜 탈옥을 해야 할까요? 탈옥을 하면 저희가 아이폰을 일반적으로 사용할 때의 권한인 일반 사용자 권한이 아니라 루트 권한을 가지게 됩니다. 이로써 아이폰의 파일 시스템 및 모든 바이너리에 대한 전체 접근 권한을 갖게 되며, 다양한 옵션을 사용하여 아이폰을 사용자화할 수 있습니다. 여러 탈옥 프로그램으로 탈옥을 진행할 수 있지만 저는 checkra1n 이라는 프로그램을 통해 iPhone 6 12.5.4 버전의 탈옥을 진행하였으며, checkra1n 사이트에서 준비한 아이폰에 설치된 버전의 탈옥을 지원하는지 확인 후 탈옥을 진행해야 합니다. 참고 영상 https://www.youtube.com/watc..
RxRelay? - Relay와 Subject의 차이 Relay는 Subject의 Wrapper 클래스로, PublishRelay와 BehaviorRelay가 있습니다. BehaviorRelay의 소스 코드를 확인해보면서 공부해보도록 하겠습니다. public final class BehaviorRelay: ObservableType { private let subject: BehaviorSubject /// Accepts `event` and emits it to subscribers public func accept(_ event: Element) { self.subject.onNext(event) } /// Current value of behavior subject public var value: ..
문제 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표) 또한 무시한다. 예제 1 입력 paragraph = "Bob hit the ball, the hit BALL flew far after it was hit." banned = ["hit"] 출력 "ball" 다음과 같은 조건에 맞게 입력값에 대한 전처리 작업이 필요합니다. 1. 입력값에 대소문자가 섞여 있으므로, 소문자 처리 2. 쉼표 등 구두점 존재 이후 문자 배열에 대해 각 요소의 개수를 구한 후, 가장 높은 갯수의 단어를 반환하도록 구현해야합니다. 리스트 컴프리헨션, Counter 객체를 사용한 풀이 먼저 쉼표, 마침표 등의 구두점을 정규식을 사용해 제거하는 전처리 과정을 수행하도..
문제 로그를 재정렬하라. 기준은 다음과 같다 1. 로그의 가장 앞 부분은 식별자다. 2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 4. 숫자 로그는 입력 순서대로 한다. 예제 1 입력 ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"] 출력 ["let1 art can", "let3 art zero", "let2 own kit dig, "dig1 8 1 5 1", "dig2 3 6"] 요구 조건을 깔끔하게 처리하라라는 문제입니다. lambda와 + 연산자를 사용해 구현해보도록 하겠습니다.(feat. isdigit()) 풀..
extension Reactive의 사용 이번 포스팅에서는 아래 예시처럼 일반적으로 많은 프로젝트에서 Reactive를 extension해서 사용하는데, Reactive가 무엇이고 왜 사용하는지에 대해 공부한 것을 정리하고자 합니다. // 예시 class MainViewController: UIViewController { } extension Reactive where Base: MainViewController { var setAlert: Binder { ... } } Reactive.swift 파일의 코드는 다음과 같습니다. 한줄 한줄 천천히 이해해보도록 하겠습니다. /* Reactive.swift */ @dynamicMemberLookup public struct Reactive { public ..
문제 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. 예제 1 입력 ["y", "o", "u", "n", "g"] 출력 ["g", n", "u", "o", "y"] 먼저 투 포인터를 이용한 전통적인 방식으로 구현한 후, 파이썬의 기본 기능을 이용해서 다시 구현하도록 하겠습니다. 여기서 "리턴 없이 리스트 내부를 직접 조작하라"는 제약 사항은 문자열의 내부를 스왑하는 형태로 풀이하라는 의미입니다. 투 포인터를 이용한 배열 요소 스왑 배열의 인덱스를 가리키는 left, right 을 각각 초기화한 후, 각 배열의 원소를 변경해나가는 방식입니다. def reverseString(s: list[str]) -> list[str] : left, right = 0,..