728x90

분류 전체보기 209

이동석 코치님 C언어 강연

강의를 들었지만, 아직 개념이 모호한 것이 있다. 이해하고 새롭게 알게된 내용 위주로 적었다. 내용상 부족한 부분이 있을 수 있어 참고용으로 보면 좋을 것 같다.이동석 코치님 C언어 강연c언어가 다른 언어와 다른 점은 무엇인가?인터프리터 컴파일러를 쓴다는 차이가 있다.파이썬은 0이나 1같은 정수형 하나 저장하는데, 항상 22바이트를 쓴다.즉, 파이썬 같은 경우 임베디드나 작은 전자 기기에 들어 갈때, 바이트수가 크게 저장되면 낭비되는 메모리가 크다.임베디드는 시스템 프로그래밍을 할때 메모리 최적화 성능이 저하됨을 막아야한다.(애초에 용량이 적다.) 그러므로 C언어를 사용하여 메모리를 효율적으로 조절한다.C언어는 얼마만큼의 바이트를 처리할까?어떤 아키텍쳐를 쓰냐에 따라 처리 바이트 수가 다르다.C에서는 보..

BST(Binary Search Tree)

사실상 코어타임을 하면서 가상화(도커, 하이퍼 V), malloc 에 대해 개념을 학습했어야 했는데, 못했다. 다음에 다시 알아보는 것으로 하고 시현님이 설명해주신 BST에 대해 재정리를 해보고자 한다.[참고 사이트]https://github.com/sihyun10/data_structures_docker/wiki/BST-(Binary_Search_Tree)BST란?모든 원소는 유일한 key 값을 갖는다 (중복 없음)왼쪽 서브 트리의 모든 원소들은 루트(root)의 키보다 작은 값을 갖는다.오른쪽 서브 트리의 모든 원소들은 루트(root)의 키보다 큰 값을 갖는다.즉 왼쪽 서브트리 물론 왼쪽 서브트리, 오른쪽 서브트리 모두 이진 탐색트리이다.BST의 특징하나의 루트 노드와 0개 이상의 하위 트리로 구성되..

AVL 트리

AVL 트리[참고 사이트]https://velog.io/@wakeupmakeup/AVL-%ED%8A%B8%EB%A6%AChttps://velog.io/@dankj1991/Tree-AVL-Treehttps://yoongrammer.tistory.com/72https://www.youtube.com/watch?v=9BiHgy40NNE&ab_channel=%EC%BD%94%EB%93%9C%EB%9D%BC%EB%96%BCAVL 트리(Adelson-Velsky and Landis Tree)는 스스로 균형을 잡는 이진 탐색 트리입니다.균형 이진 탐색 트리(Self-balancing Binary Search Tree)의 일종으로, 트리의 높이를 항상 일정하게 유지하여 탐색, 삽입, 삭제 연산에서 O(log n)의 성..

WEEK5 퀴즈 복습

5주차 퀴즈 복습시간이 좀 됐지만, 5주차의 마무리를 해야하므로 퀴즈 내용을 복습해봤다. B-Tree를 설명할 정도로 능숙했지만, 문제를 잘 못 읽어 1, 2번 문제 틀린게 아직까지 마음이 아프다… 1번 문제차수가 3인 아래 B-Tree에서 17을 새로 삽입한 후의 결과를 그려보세요.→ 이것은 내가 전에 설명한 B-Tree 삽입 로직을 생각하여 풀면된다. 17이 들어가면 15보다 크고, 23보다 작으므로 [20, 22] 자식 노드에 포함되게 된다. 그러나 해당 트리는 차수가 3이므로 자식이 최대 2개이다.그러므로 [17, 20, 22]에서 중간 인자인 20은 승급한다. 승급된 이후 부모노드가 [20, 23, 27]이므로 부모노드에서도 23이 승급합니다. 그러면 그 위의 부모노드도 [10, 15, 23]에..

WEEK 05 TIL C언어 (4월17일 목요일)

오늘은 5주차의 마지막 날로 코드 리뷰와 조별 발표를 하는 날입니다. 9:40 ~ 10:30깃허브 리포지트리 커밋 준비했습니다. 그런데 오류가 발생하여 발표 시간에 버그를 수정하여 정상 업로딩 완료했습니다.5주차 발표 진행10:30 ~ 12:00여러 팀의 발표를 통해 다양한 방식의 풀이를 알 수 있는 기회였습니다.6주차 발제13:00 ~RB트리의 개념들을 학습하고 코드로 구현하기(CLRS)코드 구현이 의외로 많지 않으니 최대한 개념을 이해하자.이해는 영상 참조하고 실제 코드 구현은 책을 참고하자.야외 운영진 티타임 진행14:00 ~ 15:00가상화의 개념, B-Tree, BST 등의 내용 아쉬움이 남는 일주일이었다.말할 기회도 많지 않았는데, 정글와서 말하기 능력을 많이 늘렸다. 등의 의견이 있었다.C언..

WEEK 05 C언어 바이너리트리 1,2,3,4번 문제(4월16일 수요일)

바이너리트리에 들어가기 전에 C언어에서의 return에 대한 사실을 발견하게 되서 짧게 알아보고 가겠다.바이너리트리에 결과값을 반환할 때 해당 개념을 꼭 알아야한다.return에 대한 새로운 사실C언어에서는 return 0이 false고, return 1이 true이다.즉, 1이 반환되면 if 문을 진입하고, 0은 else문을 진입한다.1. C언어 Binary Tree 1번1. identical설명:두 이진 트리가 구조적으로 동일한지 확인하는 재귀 C 함수 작성둘 다 비어 있거나, 구조와 값이 완전히 같아야 함같으면 1 반환, 다르면 0 반환함수 원형:int identical(BTNode *tree1, BTNode *tree2);예시:tree1과 tree2 모두 1, 3, 2, 5, 4, 7, 8이면 ..

WEEK 05 C언어 스택 앤 큐 5,6,7번 문제(4월16일 수요일)

오늘도 어김없이 10시에 코어타임을 진행했습니다.각 문항에 대해 서로의 풀이 방식을 공유했습니다. 오늘은 목요일이 바로 다음 날이므로 문제들 위주로 풀어보는 시간을 가졌습니다.5. C언어 Stack and Queue 5번5. recursiveReverseQueue문제 설명:큐를 재귀적으로 뒤집는 C 함수 작성함수 원형:void recursiveReverseQueue(Queue *q);예시:입력 큐: (1, 2, 3, 4, 5) → 결과 큐: (5, 4, 3, 2, 1)※ 구현 팁:if (q->ll.head == NULL) return;temp = dequeue(q);recursiveReverseQueue(q);enqueue(q, temp);[풀이 방법]큐가 size만큼 재귀적으로 뒤집어서 출력하면뒤집어진..

WEEK 05 C언어 스택 앤 큐 1,2,3,4번 문제(4월15일 화요일)

저번 포스팅에 이어서 스택 앤 큐에 풀어본 문제에 대해 작성해봤습니다.1. C언어 Stack and Queue 1번1. createQueueFromLinkedList문제 설명:연결 리스트에 저장된 정수들을 모두 큐에 넣어(linked-list 기반 큐) 새로운 큐를 생성하는 C 함수를 작성하세요.첫 번째 노드부터 순서대로 enqueue() 하며, 큐가 비어 있지 않다면 먼저 비워야 합니다.함수 원형:void createQueueFromLinkedList(LinkedList *ll , Queue *q);예시:입력 연결 리스트가 1, 2, 3, 4, 5일 경우:결과 큐는 1 2 3 4 5[풀이 방법]노드 첫번째부터 지정NULL일때까지 실행(밑에 과정)연결리스트의 각 값을 큐에 삽입커서를 다음 노드로 옮깁니다..

WEEK 05 C언어 링크드 리스트 5,6,7번 문제(4월15일 화요일)

오전 팀원 코어 타임을 가졌습니다. 퀴즈를 진행하는 날입니다.BST, B-Tree 에 대해서 서로 공부한 내용을 공유하는 시간을 가졌습니다.오늘 배운 BST내용은 따로 포스팅하도록하겠습니다.코어타임BST 대해…시연님 git 블로그 참고https://github.com/sihyun10/data_structures_docker/wiki/BST-(Binary_Search_Tree)*연산자가 -> 연산자보다 우선순위가 높기때문에 괄호를 써야한다.ex)(node)->left) 이중포인터를 왜 쓰는가?구조체에서 포인터(->)로 언급 됐을때, 구조체(ll) 안의 포인터로 호출(next)로 되어있을때구조체 안의 포인터를 호출하고 싶을때는 이중 포인터(**ll)를 쓴다.WEEK 05 퀴즈금일 퀴즈를 진행했습니다. B-T..

WEEK 05 C언어 링크드 리스트 2,3,4번 문제(4월14일 월요일)

아침 중에 코어타임을 가지고, 배운 내용을 바탕으로 GCC에 대해 공부하여 미리 올려놨습니다.오늘은 링크드 리스트 2, 3, 4번 문제를 C언어 기반으로 풀어보겠습니다.2. C언어 Linked List 2번[문제 내용]2. alternateMergeLL설명:두 개의 연결 리스트가 주어졌을 때, 두 번째 리스트의 노드들을 첫 번째 리스트의 자리 사이사이에 삽입하는 함수 작성.※ 첫 번째 리스트의 자리가 부족하면, 두 번째 리스트의 남은 노드는 그대로 유지됨함수 원형:void alternateMergeLL(LinkedList *ll1, LinkedList *ll2);예시:리스트1: 1, 2, 3 리스트2: 4, 5, 6, 7 → 결과: 리스트1: 1, 4, 2, 5, 3, 6, 리스트2: 7리스트1: 1..

728x90