목록C (13)
나무 숲
아주 좋은 기회로! 7주 동안의 코딩뉴비챌린지에 참여했다. 주로 이 강의를 들으면서 + 추가로 매주 다른 페이스메이커들의 라이브강의도 보고 매주 미션도 하는거다. https://www.edwith.org/boostcourse-cs-050 [부스트코스] 모두를 위한 컴퓨터 과학 (CS50 2019) 강좌소개 : edwith - 부스트코스 www.edwith.org 1. 강의 난 컴터시스템 처음배울때 개멘붕이었는데 좀 알고 들어서 그런지 모르겠지만 설명이 쉽고 현실적이고 재밌는듯. 인상깊은건 이 강의에는 컴퓨터 시스템 + 자료구조 + 알고리즘 까지 한다. 현재 유툽 CEO가 원래 인문학도였는데 이 강의를 듣고 IT쪽에 관심..? 아무튼 그런 비하인드가 있다고 한다. 지금 챌린지 끝나고 나서도 영어공부할겸 계..
cmath에서 유용한 것들을 소개합니다. http://www.cplusplus.com/reference/cmath/?kw=cmath 위 레퍼런스에 보시면 훨~~씬 다양한 기능들이 많지만 자주 사용하는 것만! 왜냐면 저도 보기 위해서 입니다.1. C/C++ 제곱 표현 (Raise to Power)http://www.cplusplus.com/reference/cmath/pow/ pow(base, exponent) base^exponent의 값을 리턴합니다. 1) base가 유한한 음수이고, exponent가 유한하지만 정수가 아닐 때 domain error을 일으킵니다. 2) base, exponent 둘 다 0일 때 특정 실행에 대해 domain error을 일으킵니다. 3) base가 0이고 expone..
scanf("%s", str) ..... 는 적합하지 않다."%s" 는 whitespace(공백) 전까지의 문자열만 입력받기 때문이다. 1 fgetsgets()도 있긴 하지만 지양하는 편이 좋다고 한다.왜냐면! gets는 입력받는 문자열의 길이를 모르기 때문에 버퍼를 초과하여 char들을 저장할 수 있는데 이것은 위험하고.. 아무튼 뭐 하나라도 찝찝하면 안써야 뒤탈이 없다고 한다.공백을 포함한 문자열 = line을 읽고 싶다면 gets 대신 fgets()를 사용한다. fgets (str, 100, stdin);에서 알 수 있듯이 fgets의 매개변수로는 문자열이 저장되는 곳, 입력받는(stdin) 문자열의 최대길이(100)가 포함된다. 2 scanf [] scanf ("%[^\n]%*c", str); s..
EOFEnd Of File파일의 끝을 의미하는 상수(-1)윈도 콘솔 창에서는 ctrl+z의 입력을 의미 %lfdouble형 변수를 입력받기 위해 fflush(stdin)입력 버퍼를 비운다 NULL 의 아스키: 0
* 책 열혈강의 + 인터넷 트리 Tree 비선형 자료구조마치 조직도같은 모양! 용어 Node 노드 : 데이터를 저장하는 각각의 요소 Root Node 루트 노드 : 트리 구조의 최상위 노드 Terminal Node 단말 노드 : 아래로 다른 노드가 연결되어 있지 않은 노드 Internal Node 내부 노드 : 단말 노드를 제외한 노드 Edge 간선 : 노드를 잇는 선 관계 Parent 부모 : 자식 노드를 가진다 Child 자식 : 부모 노드를 가진다 Sibling 형제 : 같은 부모로부터 형제 노드를 가진다 (위 그림에서는 같은 색깔끼리 관계를 형성) Level 레벨 : 트리의 가장 위에서부터 (0) 층별로 매겨진 숫자 Height/Depth 높이/깊이 : 트리의 최고 레벨. 위 그림에서는 2 Deg..
큐큐는 선착순에 비유할 수 있다.먼저 온 사람이 먼저 들어가는 것처럼, 큐라는 자료구조 안에서는 먼저 들어온 데이터가 먼저 나간다.이러한 구조를 FIFO (First-In, First-Out. 선입선출)라고 한다.빈 큐. 큐에서는 앞부분, 즉 머리를 Front로 나타내고 뒷부분, 즉 꼬리를 Rear로 나타낸다. 데이터를 넣은 모습. (enqueue)데이터가 하나뿐이므로 데이터=front=rear이다.데이터를 이렇게 더 채워넣은 상태에서 데이터 삭제 함수(dequeue)를 호출하면 가장 앞의 데이터가 빠져나간다. 따라서 front는 2라는 값을 가진 노드를 가리키게 된다. 양방향 연결 리스트로 구현하였습니다~ (거꾸로도 출력할 수 있어서..)연결 리스트를 이용한 큐 구현0 구조체 정의+초기화 #includ..
(사실 스택과 큐는 C++에서 #include #include 그리고 자바에서 java.util.stack java.util.queue 을 이용하여 직접적인 구현 없이 사용이 가능합니다) 스택 Stack을 한국어로 번역하면 쌓다, 입니다. 이름에서도 알 수 있듯이 데이터를 접시처럼 쌓고, 맨 아래 접시부터 빼면 접시가 무너지기에.. 접시를 사용하려면 맨 위 접시(데이터)를 빼내야 합니다. 이렇게 나중에 들어간 것이 먼저 나오는 구조를 LIFO (Last-In First-Out. 후입선출) 구조라고 합니다. 빈 스택입니다. 맨 위를 top, 맨 아래를 bottom이라고 합니다. 스택에 데이터를 넣는 것을 push라고 합니다. 위 그림은 데이터가 하나뿐이므로 데이터=top=bottom인 상태입니다. 데이터가..
이중 연결 리스트 Double Linked List 이중 연결 리스트입니다. 일반 연결 리스트와 다르게 한 노드를 기준으로 그 전 노드를 가리키는 before, 그 다음 노드를 가리키는 next 포인터가 존재합니다. 첫 번째 데이터가 tail에 삽입된 모습입니다. 노드가 하나뿐이라 head=tail=뉴노드 입니다. 뉴노드를 삽입하는 모습입니다. 뉴노드의 next은 (헌)노드, (헌)노드의 before는 뉴노드 입니다. 이후 뉴노드는 tail이 됩니다. head는 그대로인 모습입니다. 노드를 삭제하는 모습입니다. 더미노드를 만들어 삭제할 부분인 tail를 가리키게 합니다. tail는 tail->before을 가리킵니다. 삭제될 노드를 가리키는 tail->next는 NULL이 됩니다 더미노드의 메모리를 해제..
* 열혈강의 자료구조 책 + 인터넷 + a 원형 연결 리스트 Circular Linked List 원형 연결 리스트입니다.그림처럼 하나로 쭉 이어지며, tail이 별도로, 반드시 필요하지는 않습니다.head와 tail을 구분지어서 tail과 tail->next(head)로 사용하는 경우도 있습니다.저는 구분짓지 않고 head만을 사용하였습니다. (따라서 마치 tail과도 같은 역할을 수행하게 되었습니다..) 리스트가 텅 빈 상태에서 뉴노드를 넣게 되면 보여지는 모습입니다 노드가 하나 이상일 때 노드를 추가하면 나타나는 모습입니다.이러한 구조 때문에 head부터 리스트의 데이터들을 출력하면 생각하던 결과와 다소 다른 값이 출력됩니다.출력값은 아래 스크린샷에 있습니다. (1에서 5.. 순서대로 출력하려면 h..
* 열혈강의 자료구조 책 + 인터넷 + a 연결 리스트란? (메모리의 동적 할당) 메모리의 동적 할당, 즉 malloc와 free를 이용한 연결 리스트의 핵심 중 하나는 바로 아래 코드입니다 #include using namespace std; typedef struct _Node{ int data; struct _Node *next; } Node; Node 구조체입니다. 여기서 Node란, data, 즉 어떤 값을 가지고 있으며, 동시에 Node형 구조체 변수의 주소 값을 저장할 수 있는 포인터 변수를 포함합니다. (책에서는 바구니에 비유) 더 단순하게 이해해보자면 Node의 값은 data, 그리고 다음 Node의 주소는 next에 있다. 즉 data라는 값을 가진 노드 하나는 next 노드를 가리킨다..
* 열혈강의 자료구조 책 + 인터넷 + a책이 정말 너무 잘 되어있지만 여기엔 간단하게 씀 + 내상각 추가 순차 리스트 (배열 기반) 순차적으로 접근할 수 있는, 구조체와 배열을 이용한 연결 리스트이다. 1. 배열 기반의 구조체 정의 typedef struct _ArrayList{ int arr[100]; int numOfData; //데이터의 개수 int curPosition; //배열의 인덱스 값 저장 } List; //구조체 이름을 List로 정의 2. 구조체 기반 함수 정의(기능 위주)void ListInit(List *list){ //리스트 초기화 list->numOfData = 0; //리스트에 저장된 내용이 없다 list->curPosition = -1; //아무것도 저장하지 않음을 의미 }..
조건 - 원반은 한 번에 하나만 옮길 수 있다 - 작은 원반 위에 큰 원반을 올릴 수 없다 패턴 분석 C를 3으로 옮기고자 할 때, A와 B를 2에 옮겨 놓으면 가능하다. -> B를 2로 옮기고자 할 때, A를 3에 옮겨 놓으면 가능하다. 이번엔 4개 (위에서부터 아래로 A,B,C,D) D를 3으로 옮기고자 할 때, A,B,C를 2로 옮겨 놓으면 가능하다. -> C를 2로 옮기고자 할 때, A,B를 3으로 옮겨 놓으면 가능하다. -> B를 3으로 옮기고자 할 때, A를 2로 옮겨 놓으면 가능하다. ... 같은 방식으로 몇 개의 원반이 있던 간에 어떠한 동일 패턴이 존재한다는 것을 알 수 있다. 이를 다시 일반적으로 표현해보면, n개의 원반이 있다고 할 때 (위에서부터 아래로 1,2...n번째) 1~(n-..
자료구조의 목적은 데이터를 효율적으로 저장하는 데 있다 이러한 자료구조를 기반으로 작성된 알고리즘은 메모리와 속도를 고려하게 되는데 우리가 더 관심있게 보는 것은 속도이다. 순차 탐색 알고리즘(배열의 첫 번째 원소부터 순서대로 탐색)보다 훨씬 좋은 성능을 보인다 단!!! 배열에 저장된 원소는 정렬되어 있어야 한다 방법 1 배열의 중앙(배열 길이가 n이라고 할 때, (처음0 + 끝n-1)/2)에 찾는 값이 저장되어 있는지 확인 2 만약 아닐 경우, 찾는 값과 배열의 값을 비교하여 찾고자 하는 값이 배열의 값보다 작으면, 배열의 값을 기준으로 오른쪽에 있는 원소들로 탐색 범위 제한 마찬가지로, 배열의 값보다 찾고자 하는 값이 크면, 배열 값 기준으로 왼쪽에 있는 원소들로 탐색 범위 제한 (오름차순 일 때!)..