전체 글 364

정렬(Sorting)

1. 버블 정렬(Bubble Sort) 배열 처음부터 시작해서, 바로 옆에 있는 값과 비교하고 우선 순위에 맞게 위치를 바꾸거나 그대로 둔다. 정리하자면, "우선 순위가 낮은 걸 뒤로 보내는 방법"이라고 할 수 있다. step1) 값이 제일 큰 걸 우선 순위가 낮다고 할 때, '4'가 제일 뒤에 위치하게 된다. step2) 그 다음 큰 값인 '3'이 '4'앞에 위치한다. step3) 그 다음 큰 값인 '2'가 '3'앞에 위치하여 결과적으로 오름차순 정렬이 끝난다. - 성능 = O($n^{2}$) 2. 선택 정렬(Selection Sort) 아직 정렬되지 않은 배열 부분을 모두 차례대로 읽어가면서, 최솟값(우선순위가 높은 것)을 찾아 앞으로 위치시킨다. - 성능 = O($n^{2}$) 3. 삽입 정렬(In..

CS/자료구조 2021.07.13

우선순위 큐(Priority Queue)

1. 우선 순위 큐 - 큐에 넣을 데이터들이 우선 순위가 있다. - 우선 순위가 높은 것부터 꺼낼 수 있도록 한다. 2. 구현 방법 1. 배열 배열로 구현할 때, 우선순위가 높을수록 배열의 앞에 위치시키며 아래와 같은 단점이 있다. 1) 데이터를 삽입 및 삭제할 때, 데이터를 한 칸씩 밀고 당겨야 한다. => 연산 증가 2) 삽입 위치를 찾기 위해 처음부터 하나씩 비교를 해야 한다. 2. 연결 리스트 연결 리스트로 구현할 때, 배열과 마찬가지로 우선순위가 높을수록 리스트 앞쪽에 위치시킨다. 배열의 첫 번째 단점은 없지만, 두 번째 단점은 여전히 존재한다. 따라서 우선순위 큐는 힙을 사용하는 경우가 많다. 3. 힙 힙은 우선순위를 고려한 '완전 이진 트리'이다. *완전 이진 트리 : 자식 subtree가 ..

CS/자료구조 2021.07.11

트리(Tree)

1. 트리 1. 트리 = 계층적 관계를 표현하는 자료구조 ex) 조직도 2. 이진트리 = 자식 가지가 최대 2개로 나누어진다. 2. 구현 방법 1) 배열 기반 이진트리 2) 연결 리스트 기반 이진트리 3. 이진트리의 순회 1. 전위 순회(Preorder Traversal) - 루트 노드 먼저 방문 = node -> Left subtree -> Right subtree 2. 중위 순회(Inorder Traversal) - 루트 노드를 중간에 방문 = Left subtree -> node -> Right subtree void inorder(TreeNode* bt){ inorder(bt->left); printf("%d \n", bt->data); inorder(bt->right); } 3. 후위 순회(Po..

CS/자료구조 2021.07.11

스택(Stack) & 큐(Queue)

1. 스택(Stack) - LIFO(Last-In, First-Out) 구조 : 먼저 들어간 것이 나중에 나온다. - 스택 관련 연산 1) push : 데이터 추가 2) pop : 데이터 꺼내기 - 소스코드 1) 배열로 Stack 구현 #include #include typedef struct ArrStack { int arr[100]; int top; }Stack; void init(Stack* node); int is_Empty(Stack* node); void push(Stack* node, int data); int pop(Stack* node); int main() { Stack my_stack; int n; init(&my_stack); for (int i = 0; i < 3; i++) { s..

CS/자료구조 2021.07.10

재귀함수

1. 재귀함수란? - 함수 내에서 자기 자신을 다시 호출하는 함수 void Recursive(void){ printf("Recursive call\n"); Recursive(); } 2. 관련 문제 1. 피보나치 수열 #include int fibo(int n) { if (n == 1) return 0; if (n == 2) return 1; return fibo(n - 1) + fibo(n - 2); } int main() { int n; scanf("%d", &n); printf("%d\n", fibo(n)); return 0; } 2. 이진탐색 #include int BinarySearch(int* arr, int left, int right, int n) { if (left > right) ret..

CS/자료구조 2021.07.08

CH2) Application Layer

1. Principles of network applications 1. network & app 1) end system은 모든 계층 프로토콜을 다 가져야 함 2) 라우터는 network 계층까지만 있어도 됨 2. app 관계 종류 1) Client-Server paradigm - server 1) 항상 켜져있고, 자신만의 고유한 주소를 가진다. - client 1) 자기가 서비스 받을 때만 연결, IP주소를 할당 받음 2) client끼리 직접적 통신은 불가 2) Peer-Peer paradigm : 서버 or 클라이언트 역할이 정해지지 않음 3. 통신 1) 한 컴퓨터 내에 process끼리 통신 : OS 차원에서 IPC(Inter Process Communication 프로세스 간 통신)을 제공한다..

CS/컴퓨터망 2021.07.07

CH1) Introduction

1. What is the Internet? 1. 인터넷의 정의 1) "nuts and bolts" view (= 이렇게 구성된 것이 인터넷이다.) 컴퓨팅 능력 있는 기기들의 연결 수가 많다. Packet switches (router, switch) 연결 link (유선&무선) => 네트워크들이 서로 연결되어 또 다른 네트워크를 구성 2) "service" view (= 이런 서비스를 제공하는 것이 인터넷이다.) 2. What is a protocol? - 네트워크 구성원들 간의 주고받는 메시지에 대한 형식, 순서, field 값에 따라 취할 action을 정의한다. 3. Network Edge * core = router들의 연결 * access망 = host와 router를 연결, host가 cor..

CS/컴퓨터망 2021.07.02

클래스형 뷰를 사용한 CRUD(2)-Bootstrap을 이용한 pagination

0. Pagination이란? 게시판이나 블로그처럼 객체가 많은 경우, 페이지로 나누어 보여주는 것이 보기도 좋고 사용하기 편하다. 2021.06.23 - [웹프로그래밍/Django] - 클래스형 뷰를 사용한 CRUD 1. Pagination 구현 #views.py class BookmarkListView(ListView): model = Bookmark paginate_by = 3 #객체 3개가 한 페이지 https://getbootstrap.com/docs/5.0/components/pagination/ 에서 Alignment 즉 중앙 배치된 경우를 복사해서 사용하겠습니다. {% block pagination %} {% if is_paginated %} {% if page_obj.has_previou..

Programming/Django 2021.06.23

클래스형 뷰를 사용한 CRUD(1)-CRUD 구현

0. 클래스형 뷰란? Django의 views.py에서 함수형(def), 클래스형(class)를 모두 제공하고 있다. 클래스형 뷰의 장점은 아래와 같다. 이미 구현되어 있는 기능을 상속으로 받아와서 쓸 수 있다. 코드가 길어지거나 개발하는 웹 or 앱의 규모가 큰 경우 코드를 깔끔하게 볼 수 있다. 이때, Django에 이미 구현해서 제공하는 기능들을 제네릭 뷰라고 한다. 1. 프로젝트 시작하기 Project 시작하기 1) 가상환경 켜기 $ python -m venv myvenv $ source myvenv/Scripts/activate 2) 가상환경에 django 설치 $ pip install django 3) project 만들기 $ django-admin startproject staticproje..

Programming/Django 2021.06.23