분류 전체보기
Binary Tree의 3가지 순회방법 구현하기
Binary Tree Traversal Binary Tree를 횡단하면서 Tree의 모든 데이터를 가져오는 방법에는 3가지 방법이 있다. Inorder (Left, Root, Right) Preorder (Root, Left, Right) Postorder (Left, Right, Root) Inorder 우선 왼쪽 자식을 따라서 끝까지 탐색한다. 왼쪽 끝 leaf에 도달하면 해당 leaf를 출력하고, 해당 leaf의 Root인 부모 Node를 출력한다. 그 다음에는 해당 부모 Node의 오른쪽을 탐색하기 시작하며, 끝에 도달하면 똑같이 출력 이후에 Root로 돌아온다. Preorder 자기 자신을 먼저 출력하고 그 다음에 왼쪽 - 오른쪽 순서로 탐색을 하는데, 역시나 자기 자신을 먼저 출력하고 왼쪽과 ..
Graph 기본 개념
Tree와 Graph 사실 Tree는 Graph의 한 형태이다. Tree는 root가 있고, 단방향이며, cycle이 있을 수 없는, 아래로만 흐르는 방향 그래프이다. Graph의 방향 Graph는 방향이 있을 수도 있고, 없을 수도 있다. 있으면 Direted Graph가 되고, 없으면 Undirected Graph가 된다. Graph 안에서의 Circle 하나 이상의 Circle이 있으면 Cyclic Graph라고 하며, 단 한개의 Cycle도 없다면 Acyclic Graph라고 한다. Graph를 표현하는 방법 Adjacency Matrix Adjacency List Adjacency Matrix는 2차원 배열에 표현하는 방법이고, Adjacency List는 배열에 Node들을 나열하고 관계를 L..
Tree의 종류
What is Tree Array, LinkedList, Stack, Queue는 일직선 데이터 구조이다. 반면에 Tree는 부모 - 자식 관계를 갖는 데이터 구조이다. 따라서 Tree에는 계층과 그룹이 있다. 그리고 Tree의 맨 끝, 더이상 자식이 없는 Node를 leaf라고 부른다. Binary Tree (이진 트리) Child Node가 최대 2개까지만 붙는 Tree가 Binary Tree이다. Child Node가 3개씩 붙게 되면 Ternary Tree라고 부른다. 우리가 특히 관심을 갖고 공부하기 되는 Tree는 Binary Tree이다. Binary Search Tree (이진 검색 트리) Binary Tree는 Child Node가 최대 2개라는 조건 외에 다른 조건은 필요 없다. 하지만..

데이브 후버 · 애디웨일 오시나이 - 『프로그래머의 길, 멘토에게 묻다』
◈ 서론 5월의 월기장에서도 소개했던 한정수 님의 비전공자를 위한 개발자 취업 올인원 가이드 강의를 듣다가 이 책을 처음 알게 되었다. 이 책은 견습 프로그래머가 숙련 프로그래머로 성장하는 길을 안내하는 지침서라 소개되고 있다. 나 또한 국비지원 학원 수료 이후에도 개발 분야에서의 경력을 어떻게 시작하고 설계해야 될지 고민이 많이 되었기 때문에 진중한 마음으로 이 책을 구입하게 되었다. 읽은 기간 : 2021.05.28 ~ 2021.08.03 ◈ 소감 '개발을 왜 하는가?' 를 넘어서, '개발이라는 분야에 어떻게 파고 들 것인가?'에 대한 질문에 답변이 되어주는 책이었다. 개발자의 수요가 급증하고, 개발자가 되고 싶어 하는 사람들이 차고 넘치는 이 시기에, 덩달아서 개발이라는 분야에 발을 들인 나는 과연..
Java에서 Queue 직접 구현해보기
Queue의 4가지 기능 add() : 맨 마지막에 데이터를 삽입 remove() : 맨 앞에서 데이터를 꺼냄 peek() : 맨 앞 데이터를 확인 isEmpty() : 큐에 데이터가 있는지 없는지 확인 코드로 구현해보기 import java.util.NoSuchElementException; class Queue { class Node { private T data; private Node next; public Node(T data) { this.data = data; } } private Node first; private Node last; public void add(T item) { Node t = new Node(item); if (last != null) { last.next = t; } ..
Java에서 Stack 직접 구현해보기
Stack의 4가지 기능 pop() : 맨 마지막에 넣은 데이터를 가져오면서 지움 push() : 새로운 데이터를 맨 위에 쌓아올림 peek() : 맨 마지막 데이터를 확인 isEmpty() : 스택에 데이터가 있는지 없는지 확인 코드로 구현해보기 import java.util.EmptyStackException; class Stack { class Node { private T data; private Node next; public Node(T data) { this.data = data; } } private Node top; public T pop() { if (top == null) { throw new EmptyStackException(); } T itme = top.data; top = t..
class, 그리고 JS의 객체 지향
클래스를 이용한 모듈화 객체지향 JavaScript 객체 지향 프로그래밍은 하나의 모델이 되는 청사진을 만들고, 그 청사진을 바탕으로 한 객체를 만드는 프로그래밍 패턴이다. 여기에서 청사진을 바탕으로 한 "객체"는 인스턴스 객체(instance object), 줄여서 인스턴스라고 부른다. "청사진"은 클래스라고 부른다. 객체를 만드는 방식은 일반적인 함수를 정의하는 것과 비슷하다. function Car(color) {} let avante = new Car("blue"); let mini = new Car("cyan"); let beetles = new Car("red"); 이 때, 함수를 이용하는 방법이 조금 다르다. 그냥 실행하는 것이 아니라 new 키워드를 활용해서 만든다. 이는 새로운 인스턴스를..
고차함수
First-class citizen JavaScript에는 특별한 대우를 받는 일급 객체(first-class citizen)가 있다. 대표적인 일급 객체 중 하나가 함수이다. 함수는 다음과 같은 부분에서 특별하게 취급된다. 변수에 할당(assignment)할 수 있다. 다른 함수의 인자(argument)로 전달될 수 있다. 다른 함수의 결과로서 반환될 수 있다. 변수에 함수를 할당할 경우 주의해야 할 점은 호이스팅이 되지 않는다는 것이다. 하지만 호이스팅의 경우를 제외하면, 변수에 함수를 할당하는 함수 표현식이나 기존에 알고 있던 함수 선언식이나 크게 다르지 않다. 다만 함수 표현식의 경우 함수가 변수에 저장될 수 있다는 사실을 분명하게 보여준다. What is higher order function?..
Big-O 표기법
What is Big-O? Algorithm의 성능을 수학적으로 표현해주는 표기법 Algorithm의 시간과 공간 복잡도를 표현할 수 있게 해줌 Algorithm의 실제 러닝 타임을 표기해주기 보다는 데이터나 사용자의 증가에 따른 Algorithm의 성능을 예측하는 것이 목표 O(1) constant time F (int[] n) { return (n[0] == 0) ? true : false; } 입력 데이터의 크기에 상관 없이 언제나 일정한 시간이 걸리는 Algorithm O(n) linear time F (int[] n) { for i = 0 to n.length print i; } 입력 데이터의 크기에 비례해서 처리 시간이 걸리는 Algorithm O(n²) quadratic time F (int..