분류 전체보기

큐? 큐는 선입 선출구조로, 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입 선출구조입니다. 큐에 데이터를 추가하는 작업을 enqueue, 데이터를 꺼내는 작업을 dequeue, 데이터를 꺼내는 쪽을 front, 데이터를 넣는 쪽을 rear라고 합니다. 배열로 큐 구현하기 1. enqueue 데이터 x를 enqueue하려면 배열 que의 마지막 원소의 인덱스인 idx의 다음 인덱스인 idx + 1에 추가합니다. que[idx + 1] = x 이때 처리의 복잡도는 O(1)이고, 비교적 적은 비용으로 구현할 수 있습니다. 2. dequeue 데이터 y를 dequeue하려면 배열 que의 0번째 원소를 꺼내고, 이후의 원소들을 앞쪽으로 옮겨야 합니다. 이때의 처리 복잡도는 O(n)으로, 데이터를 꺼낼 때마다 ..
HFS(HTTP File System) rejetto 공격이란? HFS에서 %00 처리 미흡으로 인해 /search=%00{.exec|cmd.} 와 같이 원격으로 cmd 명령이 실행되는 취약점이 발견되었습니다. HFS rejetto 공격 실습 1. 파일 서버 공격자에 의해 원격 명령이 실행될 파일 서버입니다. 2. 공격자 공격자의 웹 브라우저를 통해 HFS rejetto 공격을 수행합니다. 공격자의 웹 브라우저를 통해 파일 서버로 이동합니다. 앞서 설명하였듯 HFS rejetto 공격은 HFS에서 %00 처리 미흡으로 인해 /search=%00{.exec|cmd.} 명령으로 원격에서 파일 서버에 cmd 명령을 실행하는 공격입니다. 그러므로, 파일 서버의 search에 파일 서버에 원격에서 계산기를 실행하..
스택이란? 데이터를 임시 저장할 때 사용하는 자료구조로, 데이터의 입력과 출력 순서는 후입선출(LIFO) 방식입니다. PUSH로 데이터를 스택에 넣고, POP을 통해 데이터를 스택에서 꺼냅니다. 스택 구현하기 1. 스택 초기화 스택 배열 stk는 푸시한 데이터를 저장하는 스택 본체인 리스트형 배열입니다. 인덱스가 0인 원소를 스택의 바닥이라고 하며, 데이터가 스택에 추가되는 PUSH 작업이 수행되면 stk[0]에 저장됩니다. 그렇다면 고정 길이의 스택 stk 배열을 구현할 때 어떤 인자를 전달해야할까요? 바로 스택의 최대 크기를 나타내는 capacity와 현재 스택에 쌓여 있는 데이터의 개수를 나타내는 stack pointer입니다. 그렇다면 고정길이 스택 클래스인 FixedStack의 init 메서드를..
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 객체를 사용한 풀이 먼저 쉼표, 마침표 등의 구두점을 정규식을 사용해 제거하는 전처리 과정을 수행하도..
Younngjun
'분류 전체보기' 카테고리의 글 목록 (13 Page)