LeetCode는 해외 코딩테스트 사이트으로 문제 풀이 완료 후 Run Time이나 Memory 점유율 같은 정보를 주기 때문에 좋은 사이트이다. 단점으로는 예시 언어로는 Java 뿐이며, 문제 언어도 메이저급만 지원된다. 무료만으로 충분히 좋은 것이 많지만 부분 유료 결제가 존재하며, 자료가 타 사이트(Programmers, Hacker Rank 등) 비해 적은 수준이다.
Learn 챕터 부터는 leetcode의 무료 강의 내용이며 그 전에는 여러 자료 구조의 정의 및 차이점을 기술한다.
Data Structure
선형 자료구조는 데이터가 선형으로 연결되어 있는 자료구조입니다. 선형 자료구조의 예로는 다음과 같은 것들이 있습니다.
- 배열(Array): 데이터가 메모리 공간에 연속적으로 저장되는 자료구조입니다.
- 링크드 리스트(Linked List): 노드(node)로 구성된 자료구조입니다. 노드에는 데이터와 다음 노드에 대한 포인터가 포함됩니다.
- 스택(Stack): 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 자료구조입니다.
- 큐(Queue): 양쪽 끝에서 데이터를 넣고 뺄 수 있는 자료구조입니다.
- 덱(Deque): 양쪽 끝에서 데이터를 삽입하거나 삭제할 수 있는 자료구조입니다.
비선형 자료구조는 데이터가 선형으로 연결되어 있지 않은 자료구조입니다. 비선형 자료구조의 예로는 다음과 같은 것들이 있습니다.
- 트리(Tree): 노드(node)로 구성된 자료구조입니다. 노드에는 데이터와 자식 노드에 대한 포인터가 포함됩니다.
- 그래프(Graph): 노드와 간선으로 구성된 자료구조입니다. 노드에는 데이터가 포함될 수 있으며, 간선은 두 노드를 연결합니다.
- 힙(Heap): 트리 구조로 구현된 자료구조입니다. 힙은 데이터를 우선순위에 따라 정렬하여 저장합니다.
- 트라이(Trie): 트리 구조로 구현된 자료구조입니다. 트라이는 문자열을 효율적으로 저장하고 검색하기 위해 사용됩니다.
- 해시 테이블(Hash Table): 키와 값의 쌍을 저장하는 자료구조입니다. 키를 사용하여 값을 빠르게 검색할 수 있습니다.
Linear 선형 자료구조
배열(Array)
배열은 데이터가 메모리 공간에 연속적으로 저장되는 자료구조입니다. 배열은 데이터를 효율적으로 저장하고 검색하기 위해 사용됩니다.
배열은 다음과 같은 특징을 가지고 있습니다.