CS 56

CH2) Operating System Structure

1. OS Interface 1. Command Interpreter - CLI, shell 2. GUI - folder, icons 2. System Calls 1. System Call 이란 - OS 내부 기능을 호출 - kernel에 파일로 구현되어 있음 - 프로그래머들은 system call을 API(Application Programming Interface)들을 통해 간접적으로 사용 - 직접 사용하지 않는 이유? 1) 사용하기 어려움 2) 다른 OS에서도 같은 프로그램을 실행하기 위해서 2. 종류 1) Process control - process load, execute, end, event, allocate memory 2) File 조작 3) Device 조작 4) Information ..

CS/운영체제 2021.09.01

CH1) Introduction

1. OS란? - (user)소프트웨어와 하드웨어 사이에서 연결을 도와주는 소프트웨어 - 하드웨어를 관리하는 소프트웨어 - kernel + system programs으로 구성되지만, 여기서 핵심은 "KERNEL" *system program : 운영체제를 설치하면 메모장, 날씨 프로그램 등이 기본으로 설치되어 있음 장점 - 개발자가 사용하기 쉽게 인터페이스(system call)을 제공 - hardware를 효율적으로 쓸 수 있게 해준다. ex) 자원 분배(메모리 등, 충돌나는 요청 처리), 자원 보호 2. Computer 작동 1. Start-up : 시작하기 1) bootstrap program이 OS를 실행 - ROM 혹은 EEROM에 저장되어 있는 프로그램 - OS의 kernel을 load & ..

CS/운영체제 2021.08.31

자주 사용하는 파이썬 함수 정리

1. collections 라이브러리 함수 1) Counter - 리스트에서 각 요소별 개수를 사전형으로 반환 - 뺄셈 연산 가능 from collections import Counter counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue']) print(counter['blue'])#'blue'가 등장한 횟수 출력 print(dict(counter)) #3 #{'red': 2, 'blue': 3, 'green': 1} 뺄셈 연산을 활용하는 방법은 아래 발행 글의 방법 2)를 참고 [Python] 완주하지 못한 선수 1. 문제 2. 풀이 과정 방법 1) 아스키코드를 기준으로 정렬한 후, 앞에서부터 순차 탐색한다. def solution(par..

CS/기타 2021.08.25

Brute force (브루트 포스)

1. Brute force 브루트 포스는 "완전 탐색 알고리즘"이다. 모든 경우를 다 살펴보고 결과를 도출하기 때문에 100% 정확도를 가진다. 모든 경우를 본다는 것은 해가 존재할 것이라 예상되는 영역 전체를 살펴보는 것으로 기본적인 방법은 아래와 같다. 1) 선형 구조 : 순차 탐색 탐색(Searching) 1. 탐색이란? 탐색은 '데이터를 찾는 방법'을 말한다. 여기서는 '어떻게 찾을까'와 '효율적인 탐색을 위해 어떤 방식으로 데이터를 저장할까'를 고민해야 한다. 정렬과 탐색은 정수를 기준으로 한 yerinpy73.tistory.com 2) 비선형 구조 : 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 그래프(Graph) 1. 그래프 그래프는 정점과 간선으로 구성되어 있다. 그래프는 방향성이 ..

CS/알고리즘 2021.07.20

그래프(Graph)

1. 그래프 그래프는 정점과 간선으로 구성되어 있다. 그래프는 방향성이 없는 '무방향 그래프'와 방향성이 있는 '방향그래프'로 나눠볼 수 있다. '각각 정점에서 다른 모든 정점을 연결한 그래프'를 '완전 그래프'라고 하며 아래 두 그래프가 이에 해당한다. 2. 그래프 구현방법 1) 인접 행렬(adjacent matrix) 기반 그래프 2차원 배열을 이용한다. 2) 인접 리스트(adjacent list) 기반 그래프 연결 리스트를 활용하여 그래프를 표현한다. 3. 그래프의 탐색 1. 깊이 우선 탐색 (DFS : Depth First Search) 자신과 연결된 노드들 중 내용이 전달 안 된 하나를 먼저 선택해서 그 사람과 연결된 노드들에게 내용을 다 전달하면, 다음 하나를 또 선택한다. 백트래킹이라고도 하..

CS/자료구조 2021.07.19

해쉬 테이블(Hash Table)

1. 테이블 저장되는 데이터가 key & value가 한 쌍을 이룬다. 키는 서로 다른 데이터를 구별하기 위해 사용되므로 중복되어서는 안 된다. #include typedef struct data{ int number; //사람의 고유번호 = key값 int name; //데이터 }Data; int main(void){ Data arr[100]; Data person; int n; //데이터 넣기 scanf("%d %d", &(person.number), &(person.name)); arr[person.number] = person; //데이터 찾기 printf("확인하고 싶은 사람의 고유번호 입력: "); scanf("%d", &n); person = arr[n]; printf("나이 %d, 이름 %..

CS/자료구조 2021.07.16

탐색(Searching)

1. 탐색이란? 탐색은 '데이터를 찾는 방법'을 말한다. 여기서는 '어떻게 찾을까'와 '효율적인 탐색을 위해 어떤 방식으로 데이터를 저장할까'를 고민해야 한다. 정렬과 탐색은 정수를 기준으로 한다. 탐색할 데이터의 종류가 무엇이든 탐색 자체의 알고리즘에 대해서만 집중하기 위함이다. 따라서 데이터는 아래와 같이 구성한다. typedef struct item{ int searchKey; Data searchData;//Data : 원하는 데이터 type 적으면 됨 }Item; 2. 순차 탐색 - 단순하게 배열 처음부터 내가 찾는 값이 있는지 살펴본다. - 정렬되지 않은 배열을 대상으로 함 - O(n) 3. 이진 탐색 - 배열의 중앙에 위치한 데이터와 비교해서 그 데이터보다 작으면 왼쪽 구역에서의 중앙값과 또..

CS/자료구조 2021.07.15

정렬(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