콘텐츠로 건너뛰기
Home » 분류할 수 없는 » Page 4

분류할 수 없는

버블 정렬 (Bubble Sort)

버블정렬은 정렬 중에서 가장 기본적이고 쉬운 알고리듬이다. 버블정렬은 배열의 앞에서부터 큰 원소를 뒤쪽으로 보내는 작업을 반복적으로 시행하여 배열 전체를 정렬한다. 이 때 큰 값들이 물속에서 거품이 떠오르는 것처럼 움직이기 때문에 ‘버블’이라는 이름이 붙었다.

간단한 예를 통해서 버블 정렬이 어떻게 작동하는지 살펴보자. 아래와 같은 배열이 있다고 가정하자.

더 보기 »버블 정렬 (Bubble Sort)

분산 계산법

원래 분산의 계산 법은 각 개별 값이 평균으로부터 떨어진 거리의 제곱의 평균을 의미하며 다음과 같이 정의한다. $$ Var(X) = \frac{\displaystyle \sum_{k=1}^n ( N_k – E(X) )^2 }{n} $$ 결국 이 식은 “제곱의 평균 – 평균의 제곱”으로 귀결된다. $$ V(X) = E(X^2) – (E(X))^2 $$ 이걸 학교 다닐 때 배웠나 안배웠나 기억이 안난다….

Implementing Binary Heap in Swift

스위프트에서 바이너리 힙 구현하기

바이너리 힙은 선형 리스트에 이진트리형식의 데이터를 저장하는 재밌는 방식의 데이터 타입이다. 이 구조에서는 리스트(배열) 내의 원소의 위치를 맞바꾸는 동작이 빈번하게 일어나므로, 아예 배열에서 원소를 바꾸는 동작을 추가해 주도록 하자.

extension Array {
    mutating func swapElement(#at:Int, with:Int) {
        let fromElement = self[with]
        self[with] = self[at]
        self[at] = fromElement
    }
}

더 보기 »Implementing Binary Heap in Swift

Objective-C 서브 클래스에 관한 팁

서브클래싱 해야할 때

만약 커스텀 레이아웃을 가진 UITableViewCell 객체가 필요하다면 해당 클래스를 상속받은 서브클래스를 작성해야 한다. 많은 객체들이 같은 뷰를 가져야 한다면 이를 서브클래싱하여 새로 만드는것이 옳다. 그렇게 함으로써 변경사항은 간편하게 묶이기 때문이고, 이렇게 만들어진 클래스는 단지 파일을 복사하는 것만으로 프로젝트를 넘나들면서 재활용할 수 있기도 하기 때문이다.

더 보기 »Objective-C 서브 클래스에 관한 팁

싱글톤

싱글톤은 SharedInstance라는 명목으로 코코아 내에서도 상당히 자주 쓰이는 패턴이다. SharedApplication이나 NSFileManager, NSNotificationCenter 등에서 많이 활용된다. 쉽게 생각하면 다음과 같은 식으로 구현하면 될 것이라 보는데…

static SomeClass *sharedObject;
+ (SomeClass *)sharedInstance {
    if (sharedObject == nil) {
        sharedObject = [[self alloc] init];
    }
    return sharedObject;
}

더 보기 »싱글톤

마크 다운을 PDF 문서로 변환하기

마크 다운을 HTML 문서로 변환하고, 다시 HTML 문서를 PDF로 변환하는 과정을 거치면 PDF 파일을 얻을 수 있다. HTML 파일을 PDF로 만드는 데는 파이썬으로 제작된 xhtml2pdf라는 패키지가 있긴 하지만 동작이 좀 불안정하거나 한글이 제대로 렌더링 되지 않는 (한글을 제대로 랜더링하는 방법은 있는데, 이 경우 CSS가 제대로 적용되지 않는다.) 등의 문제가 있어서 웹킷 엔진으로 렌더링하는 것과 같은 결과를 얻을 수 있는 PhantomJS를 사용하기로 결정했다.
더 보기 »마크 다운을 PDF 문서로 변환하기

iOS 7 : UIDynamic의 이해

iOS 7에서 UIKit 에는 UIDynamic이라는 새로운 기술이 도입되었다. 이는 뷰에 대해 강체 물리(rigid-object physics)를 적용한 애니메이션을 구현할 수 있도록 한다. 뷰가 중력의 영향으로 떨어지거나 다른 뷰에 충돌하는 효과를 표현할 수 있다. 이는 이전에는 매우 복잡한 알고리듬을 적용하여 표현할 수 있었으나, UIDynamicItem은 매우 간단히 구현할 수 있다.
더 보기 »iOS 7 : UIDynamic의 이해

[C] 프로그램 파라미터를 처리하는 getopt() 사용법

C프로그램의 파라미터 파싱 및 처리 문자열 파싱은 스크래치 상태(아무것도 없는 빈 상태)로부터 구현하기가 만만치 않은데, 이를 도와주는 라이브러리 함수가 있으니 바로 unistd.h에 정의된 getopt() 함수이다. getopt() 이 함수의 원형은 다음과 같다. int getopt(int argc, char * const argv[], const char *optstring); 이 함수의 파라미터는 간단한다. argc, argv : main() 함수가 받은 파라미터를 그대로 전달한다. optstring : 파싱해야 할 파라미터를 쓴다. 옵션이 별도의 파라미터를 받는 경우 콜론을 함께 쓴다. 예를 들어 -h, -v, -f filename을 받는 세 가지 옵션이 있다고 하면… 더 보기 »[C] 프로그램 파라미터를 처리하는 getopt() 사용법