| Hash Table 해시 테이블의 값(value)은 키(key)에 대한 해시 함수를 호출하여 저장한다. 값은 정렬된 순서로 보관되지 않는다. 삽입 및 탐색 연산은 분할상환적으로 O(1) 시간에 수행된다. (충돌이 적다는 가정하에) 잠재적 충돌을 고려하여 구현해야 한다. 보통은 충돌되는 값을 서로 연결하여(chaining)하여 이 문제를 해결한다. 즉, 특정 키에 대응되는 인덱스 위치에 모든 값을 연결 리스트로 묶는다. | STL map 키를 기준으로 만든 이진 탐색 트리에 키(key) / 값(value) 쌍을 보관한다. 충돌을 처리할 필요가 없고 트리의 균형이 유지되므로 삽입 및 탐색 시간은 O(logN)이 보장된다. key를 기준으로 정렬된 상태로 저장한다. 물론, 정렬하지 않은 상태로 저장하는 u..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 일곱 번째 순서는 Hash Table이다. hash table은 각 data값이 key를 가지고 있는 자료구조이다. 우리가 특정 키로 특정 자물쇠를 바로 여는 것과 비슷한 자료구조이다. 키만 가지고 있다면 별도의 탐색과정 없이 효율적으로 데이터를 찾을 수 있고 이는 데이터의 크기에 관계없이 삽입 및 검색에 매우 효율적이다. 사실 배열도 일종의 hash라고 볼 수 있다. 각 인덱스에 대칭되는 값들을 배열이 가지고 있다. 그렇다면 배열이 있는데 우리는 왜 별도의 hash라는 것을 사용할까? 일반적으로 배열에서 사..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 여섯 번째 순서는 힙이다. heap이란 완전 이진트리의 일종으로 부모 노드와 자식 노드 간에 항상 대소 관계가 성립하는 자료구조이다. 부모의 노드가 자식 노드보다 크다면 Max Heap, 작다면 Min Heap이라고 한다. 이때 부모 노드와 자식 노드 간에 관계만 존재할 뿐 형제 노드 사이에는 아무런 관계가 없다. 위에서 말한 대소관계 이외에도 따로 우선순위를 위한 정의가 가능하며, 그러한 자료구조를 우선순위 큐라고도 한다. 힙은 보통 힙정렬 알고리즘, 우선순위 큐의 구현 등에 사용된다. 항상 최솟값 혹은 최..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 다섯 번째 순서는 트리이다. 트리는 계층적으로 구성되어 있고 서로 연결되어있는 데이터에 적합한 계층적 자료구조이다. 이 구조는 링크드 리스트 와는 다른 자료구조이지만, 링크된 요소끼리는 선형 순서로 링크드 리스트라고도 볼 수 있다. 트리는 오래전부터 다양한 형태로 계속 연구되어 발전되어 왔고, 활용되었으며 또 특정 상황 및 애플리케이션에 맞는 제약사항을 가지게 되었다. 트리의 형태로는 대부분이 알고 있는 이진 탐색 트리부터 B 트리, 레드 블랙 트리, AVL 트리 등이 있다. 이진 탐색 트리는 말 그대로 데이..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 네 번째 순서는 큐이다. 큐는 스택과 정 반대되는 특징을 가지고 있다. 마지막으로 들어간 노드가 마지막에 나오는 구조이다. FIFO(First In First Out)인 선입선출의 특징을 가지고 있으며, 보통 실제 세상에서 줄 서기와 같이 많은 상황이 큐로 표현될 수 있다. 스택과는 달리 마지막 노드인 top노드만 기억될게 아니라 맨 앞, 맨 뒤가 함께 기억되어야 한다. 마찬가지로 큐는 가장 유명한 그래프 탐색 방법 중 하나인 BFS에 사용되며, 큐의 구현 방법에 따라 원형 큐 등 다양한 형태로 변환할 수 있..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 세 번째 순서는 스택이다. 스택은 마지막에 들어간 item이 먼저 나오는 LIFO(Last In First Out) 구조이다. 비록 이 자료구조는 보통 일상에서 흔히 동작하는 방식이 아닌 다른 방식으로 동작하지만, top 요소 즉, 마지막 요소에 대한 접근을 필요로 할 때 유용하게 사용된다. 또한, Problem Solving을 많이 해본 결과 stack은 여러 문제에서 사용되는데 예를 들어, Tree의 Level 별로 분리하여 탐색을 하는 문제, Parenthesis가 올바르게 되어 있는지에 대한 문제, 후..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 두 번째 순서는 링크드 리스트이다. 링크드 리스트 또한 배열과 마찬가지로 Sequential 한 자료구조 중 하나이며, 선형으로 나열된 item들이 서로 연결된 구조이다. 이 구조를 보통 chain이라고 하며 chain의 한쪽 끝 부분만 알고 있으면 모든 Data를 탐색할 수 있다. 그렇다면 링크드 리스트와 배열의 차이는 무엇일까? 만약 size가 빈번하게 변경되는 시나리오라면 배열과 링크드 리스트 중 어떤 자료구조를 사용하는 것이 좋을까? 데이터를 random 하게 접근하지 않는 한 배열을 사용하는 것은 매..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 첫 번째 순서는 배열이다. 배열은 같은 data-type의 item들을 담을 수 있는 고정된 크기의 자료구조이다. 배열은 인덱싱을 기본적으로 지원하며, 이는 곧 Random 한 접근이 가능하다는 것을 의미한다. 배열은 일반적으로 많은 프로그래밍 언어에서 기본 데이터 구조로 존재한다. 하지만 Python이나 Ruby 같은 언어의 데이터 구조와 같은 리스트와 배열을 혼동해서는 안된다. 아래는 C++에서 가장 기본적인 배열이 나타나는 형태이다. // 단순 선언 int array[] = {1, 2, 3, 4, 5};..
- Total
- Today
- Yesterday
- LeetCode
- 러스트
- rust
- 내돈내산
- DP
- Interview
- 알고리즘
- 코딩인터뷰
- 속초
- PS
- 러스트 기초
- ProblemSolving
- Problem Solving
- 리트코드
- 자료구조
- coding interview
- 솔직후기
- 반드시 알아야 할 자료구조
- 인터뷰
- algorithm
- 러스트 배우기
- Tree
- 트리
- Medium
- C++
- 맛집
- interview question
- 기술면접
- 러스트 입문
- 속초 맛집
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |