안녕하세요. 오랜만입니다 이번에는 트리에 대해서 알아보도록 합시다 트리 ADT란? 위의 그림처럼 각 트리 원소는 부모원소와 0개 이상의 자식을 가지고 이러한 것을 트리라고 부릅니다. 이러한 트리 ADT에는 다양한 용어가 있습니다 루트 : 부모가 없는 노드 내부노드 : 적어도 한 개의 자식을 가진 노드 외부노드('리프'라고도 부름) : 자식이 없는 노드 형제 : 같은 부모를 가진 노드들 노드의 조상 노드의 자손 부트리 : 노드와 그 노드의 자손들로 구성된 트리 경로 : 조상 또는 자손을 따라 이어진 노드 시퀀스 경로길이 : 경로내 간선의 수 노드의 깊이 : 루트로부터 노드에 이르는 유일한 경로의 길이 노드의 높이 : 노드로부터 외부노드에 이르는 가장 긴 경로의 길이 트리의 높이 : 루트의 높이 이러한 트리..
자바스크립트를 통해서 간단한 단위 변환기를 만들어 보았습니다. 구글에 단위 변환기를 검색하시면 이렇게 깔끔한 변환기가 나옵니다. 혼공자바스크립트에서의 실습문제를 좀 더 업그레이드해서 이런 변환기를 만들 수 있습니다. 먼저 코드입니다. 훈련 document.addEventListener('DOMContentLoaded', () => { let leftInput = document.querySelector("#leftInput") let rightInput = document.querySelector("#rightInput") let p = document.querySelector("p") let span = document.querySelector("span") const select = document...
이번 시간에는 "큐"입니다. 버스나 지하철을 보시면 먼저 대기한 사람이 먼저 들어가죠? 바로 그런 선입선출의 순서를 따르는 것이 큐입니다. 큐 ADT란? 큐도 어떠한 개체를 저장하는 자료구조이고 삽입과 삭제를 아까 말씀드린 선입선출의 방식으로 구현합니다. 따라서 삽입은 큐의 뒤에서 삭제는 큐의 앞에서 수행하게 됩니다. 큐 ADT 메쏘드는 무엇이 있을까? 주로 쓰이는 큐 메쏘드는 대표적으로 push : 원소 삽입 pop : 원소를 삭제하고 반환 그리고 보조적으로 쓰이는 seek : 큐의 앞부분에 있는 원소를 삭제하지 않고 반환 size : 원소 개수 반환 isEmpty : 큐가 비어있는지 여부를 반환 printQueue : 큐의 원소들 전부를 출력 주로 이러한 메쏘드가 존재하고 있고 이것을 활용해서 큐의 ..
이번에는 스택 ADT를 살펴볼 것입니다. 스택은 간단히 말해서 "후입 선출" 즉, 나중에 들어온 것이 제일 첨 나간다. 예시를 들자면, 쌓여있는 책중에서 우리가 고르는 것은 제일 위에 있는(제일 나중에 들어온) 책을 고르게 됩니다. 또는 웹브라우저의 방문기록도 이러한 스택의 구조를 가지고 있습니다. 이러한 스택 ADT의 메쏘드를 살펴봅시다. 주로 push(e) : 원소를 삽입 pop() : 가장 최근에 삽입된 원소를 삭제하여 반환 이 두개의 함수가 쓰이게 되고 이외에는 top() : 가장 최근에 삽입된 원소를 삭제하지 않고 반환 isEmpty() : 비어 있는지 여부를 반환 이러한 메쏘드들도 사용됩니다. 이런 스택을 응용하게 되면 직접 응용 1. 웹브라우저에서 방문한 웹페이지들의 기록 2. 문서편집기에서..
이번에는 집합 ADT입니다. 먼저 특징을 살펴보자면, 집합 ADT는 유일한 개체들을 담아야 하고 이러한 개체들을 정렬된 리스트로 표현한다는 것이 되겠습니다. 각 개체들은 유일해야 하고, a b c d 나 1 2 3 4처럼 정렬되어야 합니다. 이런 집합 ADT의 주요 함수들은 이렇습니다. set union(B) set intersect(B) set subtract(B) union은 집합 B와 합집합을 반환하고, intersect는 집합 B와 교집합을 반환합니다. 그리고 subtract는 집합 B를 차감한 차집합을 반환합니다. 그리고 이러한 메서드들의 실행시간은 최대 O(|A| + |B|)가 되어야 합니다. 즉, 각 집합들의 최대 원소들의 수를 합한 것이 최대 실행시간이 된다는 것입니다. 이외의 함수들도 써..
학교과제로 소켓프로그래밍이 나와서 리눅스상에서 서버와 클라이언트의 1:1 채팅을 구현해 봤습니다. 다 좋은데 이게 동시에 채팅을 입력하는게 안되고 무조건 순서대로만 입력할 수 있게 해놔서 카카오톡같은 환경은 기대하기 어려운것 같습니다:) 그래도 순서대로 입력하는 것에 일단은 만족하고 순서에 상관없이 read(), write()가 가능한 프로그램도 나중에 구현해보는 걸로!! 아래는 코드입니다. 그리고 실제 실행 시킨 화면입니다 client의 이름까지 받고 본격적으로 채팅이 시작됩니다. 그리고 client->server 순서대로 채팅을 입력할 수 있고 그에따라 화면에 받은 문자열 내용을 출력하는 모습입니다. 그리고 q 나 quit를 입력하게 되면 채팅 프로그램이 종료됩니다.
이번 시간에는 리스트 ADT를 확장해서 그룹과 공유라는 개념을 알아봅시다. 이 개념이 다른책에는 없고 제가 듣는 강의에서만 나오는거 같은데.....그래서 간단하게 정리하는 식으로 쓰게 되었네요 ㅋㅋ 우선 그룹의 개념부터 살펴보자면 데이터 원소들이 각각 다른 그룹에 속한다는 뜻으로 받아들일 수 있습니다. 예를 들면 쇼핑몰의 상품들 1. Maker X : x1 2. Maker Y : none 3. Maker Z : z1, z2 대학의 강좌들 1. Prof. Kook : DS 2. Prof. Park : (no lecture) 3. Prof. Shin : DB, C lang 이러한 예를 들 수 있습니다. 이런 그룹의 설계 방안을 살펴보자 A. 레코드의 리스트 사용 : 1. 배열을 이용한 구현 2. 연결리스트를..