전체 글

전체 글

    알고리즘 - 병합 정렬(Mearge Sort)

    병합정렬 - '분할 정복' 방법을 채택한 알고리즘 - O(N * logN)의 시간 복잡도를 가진다. - 하나의 큰 문제를 두 개의 작은 문제로 분할한 뒤에 각자 계산하고 나중에 합친다. 기본 아이디어는 일단 정확히 반으로 나누고 나중에 정렬한다 계속 반으로 나누어서 한 개씩 남을 때 까지 나눈다. 예를 들어 a = { 8, 3, 4, 5, 1, 3, 2, 5} 이란 배열이 있을 경우 반을 나눌 경우 8 3 4 5 1 3 2 5 또 나눌 경우 8 3 4 5 1 3 2 5 또 반을 나눌 경우 8 3 4 5 1 3 2 5 한 개씩 남게된다. 다 나눴을 때 합치게 된다. 합치게 되는 과정은 보통 2의 배수만큼 합친다. 첫 번째 병합 첫 번째 합칠 때는 두 개씩 합치는데 합치면서 정렬을 하게 된다 8 3 4 5 ..

    알고리즘 - 힙 정렬(Heap Sort)

    우선 힙 트리를 알고 가야한다. 출처: 동빈나 힙 트리 힙 트리는 트리 자료구조에서 자식노드보다 부모노드가 큰 상태를 뜻한다. 최대힙과 최소힙의 다른점은 점점 내려갈수록 값이 커지는가, 작아지는가 차이지만 모두 균일성을 유지해야 한다. 완전 이진트리 완전 이진트리는 왼쪽부터 채워나간다. 완전 이진트리는 배열에 넣게되어도 유휴 공간이 발생하지 않는다. 아래와 같은 이진트리가 있을경우 A번 노드부터 L번 까지의 노드에 번호를 매긴다면 아래와 같다. 이를 보고 추리한다. n노드의 부모 -> n / 2 (나머지는 버림) n노드의 왼쪽 자식노드 -> n * 2 n노드의 오른쪽 자식노드 -> n * 2 + 1 heapify heapify는 하나의 노드에 대해 수행한다. 자식노드와 자신을 비교해 자식노드에 더 큰 수..

    알고리즘 - 쉘 정렬(Shell's Sort)

    쉘 정렬은 삽입 정렬의 개선판. 삽입 정렬을 이해하고 있어야 한다. 삽입정렬 https://clamp-coding.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%ACInsertionSort 알고리즘 - 삽입 정렬(InsertionSort) 삽입 정렬) 두 번째 원소로 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자로를 삽입하여 정렬하는 알고리즘. 해당 배열을 오름차순으로 clamp-coding.tistory.com 쉘 정렬) 쉘 정렬은 갭의 크기가 줄어들면서 정렬되는 알고리즘이다. 예를 들어 n개의 값을 가지고 있는 배열이 있다면, 처음 g..

    알고리즘 - 삽입 정렬(InsertionSort)

    삽입 정렬) 두 번째 원소로 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자로를 삽입하여 정렬하는 알고리즘. 해당 배열을 오름차순으로 정렬한다면. 두 번쨰 요소를 시작으로 key이전의 요소들과 비교를 한다. 7보단 5가 더 작으므로 7을 밀고 5를 삽입한다. 2번째 요소를 정렬했기 때문에 3번쨰 요소인 1을 이전 요소들과 비교 시작. 7보다 1이 작기때문에 7을 이동, 1을 삽입. 2회전의 결과이다. 이 이후로도 같은 작업을 이어간다. 2번째 요소부터 시작하지만 1번째 요소까지 계속 비교하며 N to 1 까지 비교해나간다. 삽입 정렬의 특징 - 배열 내에서 교환하는 방식으로, 공간복잡도는 O(1)이다. 추가적인 부분은 원소를 교환할때 사용하는 임시요소정..

    운영체제(OS) - System Call

    시스템 호출(System Call) - 프로그램과 운영체제가 상호작용하기 위한 수단. - 프로그램한테 보여지는 운영체제 인터페이스 - System Call을 통해 프로그램은 필요로 하는 서비스를 운영체제 커널에 요청한다. 시스템 호출과 함수 호출 - 둘 다 요청한 사항을 수행하고 원래 프로그램으로 복귀 한다는 점은 같다. - 시스템 호출: 유저 모드(user mode)에서 커널모드(kernel mode)로 전환이 일어남. - 함수 호출: 유저 모드에서 계속 수행 시스템 호출 방법은 운영체제/기계마다 다르다. 어셈블리 언어(기계어) 수준에서 사용가능하며 고급언어(C언어) 수준에서는 시스템 호출로 이어지는 라이브러리가 제공된다. System Call의 일종인 File Management 해당 함수들은 운영체..

    운영체제(OS) - 운영체제란

    컴퓨터 시스템 컴퓨터 시스템은하드웨어 위에 운영체제가 작동한다 그 운영체제는 User interface frogram이 작동하며 그 위에 우리가 사용하는 프로그램들이 동작하는 식으로 운영된다 운영체제는 확장된 기계로서 지저분한(상세한) 하드웨어들을 감추고 추상화되고 깔끔하며 직관적이고 편리한 모습들을 사용자에게 제공해준다. 또한 자원 관리자의 역할을 한다. 각 프로그램은 시간적 측면에서 자원을 공유하고, 공간적 측면에서 자원을 공유한다. 시간적 측면에서 자원을 공유한다. -> CPU, printer 공간적 측면에서 자원을 공유한다. -> Memory 운영체제를 통해 한개의 CPU가 여러개의 프로그램에 접근할 수 있는 스케쥴링 역할을 하기 때문이다. 다중 프로그래밍: 실선은 CPU를 사용중인 구간, 점선..

    운영체제(OS) - 프로세스

    프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 프로세스는 프로그램, 입력, 출력, 상태를 갖는다. 동일한 프로그램을 2번 실행시키면 2개의 프로세스가 생성된다. 이들은 프로그램은 갖지만 입력, 출력, 상태는 실행할 때, 조건에 따라 달라질 수 있다. 프로세스 모델: *program counter: 다음 cpu가 수행해야 할 명령어의 주소를 저장하는곳. (a) 다중 프로그래밍  메모리에 여러개의 프로그램을 적재한다 -> 다중프로그래밍 cpu는 한개의 프로그램씩 순차적으로 수행한다. 한개의 프로세스씩 순차적으로 실행하기 때문에 프로그램 카운터는 한개로 충분하다. (b) 병렬처리 4개의 프로그램을 독립적으로 병렬처리를 한다. 독립적인 순차프로세스를 진행한다. 동시..

    IOS - 화면 터치 시 키보드 내려가기

    TextField를 터치해서 키보드가 활성화 되고, 아무 처리를 하지 않으면 키보드가 사라지지 않아서 해당 위치에 있는 버튼들을 사용하기 힘들 때가 있다. return키를 누르면 키보드가 내려가게 할 수도 있지만 일반적으론 그냥 바닥화면을 터치하면 키보드가 내려가게 코딩한다. ViewController 아래에 코드를 추가해주면 화면 터치 시 키보드가 내려간다. 클래스내에 override를 추가해준다. 예) import UIKit class MainVIewController: UIViewController{ override func viewDidLoad() { super.viewDidLoad() } //소스들... //키보드가 내려가게 하는 코드 override func touchsBegan(_ thouc..

    UIKit - UITextfield

    UITextField: - 텍스트를 편집하기 위한 객체, 사용자가 클릭하면 텍스트를 입력, 수정 할 수 있다. - 여러줄을 입력할 수 없고 '한'줄만 가능하다(여러줄을 하기위해선 UITextView) TextField.becomeFirstResponder() 화면이 넘어가면 자연스럽게 커서가 텍스트필드로 넘어오고 텍스트모드가 됨. textField.keyboardType = .emailAddress // 텍스트 필드의 키보드 스타일 textField.returnKeyType = .done // 엔터버튼? 의 모드 textField.placeholder = "이메일 입력" // placeholder textField.borderStyle = .roundedRect // 선 스타일 textField.isSe..

    IOS - AutoLayout의 Hugging, Compression Resistance Priority

    Xcode에서 UI컴포넌트들을 클릭하면 Hugging Priority와 Compression Resistance Priority를 설정할 수 있다. Hugging priority는 늘어나는 우선순위 Compression Resistance priority는 줄어드는 우선순위 여러 오브젝트 중 하나가 커져야 하는 상황 -> Hugging priority 여러 오브젝트 중 하나가 작아져야 하는 상황 -> Compression Resistance priority 두 우선순위 모두 크기가 높으면 자신의 크기를 유지한다.