[TypeScript] 자료 구조로 담아내기. #14 - 연결 리스트(with. 이중 연결)이번 편은 이전 편으로부터 이어집니다. 연결 리스트의 또 다른 형태는 이중 연결 리스트입니다. 후임자의 참조만 저장하는 단일 연결 리스트와 달리 이중 연결 리스트는 선임자의 참조도 함께 저장합니다. interface DoublyLinkedListNode<T> extends DoublyLinkedList<T> { linkBefore(succ: DoublyLinkedListNode<T>): void; linkAfter(pred: D...May 3, 2025·3 min read·9
[TypeScript] 자료 구조로 담아내기. #9 - 연결 리스트(with. 연산)이번 편은 이전 편으로부터 이어집니다. 연결 리스트에는 여러 가지 변형이 있습니다. 그중 가장 기본적인 형태인 단일 연결 리스트의 연산에 대해 알아봅니다. 단일 연결 리스트에 대한 설명은 이전 편에 언급된 연결 리스트의 설명으로 충분할 것으로 보입니다. 연결 리스트는 노드라는 단위로 이루어져 있고, 이는 요소와 다음 노드에 대한 참조를 가지고 있습니다. 연산의 종류 interface SinglyLinkedList<T> { access(...Mar 29, 2025·2 min read·17
[TypeScript] 자료 구조로 담아내기. #8 - 연결 리스트연결 리스트는 가장 간단한 형태의 연결된 자료 구조입니다. 이는 배열과 달리 순차 접근을 기반으로 합니다. 순차 접근 순차 접근은 임의 접근과 달리 임의의 위치에 한 번에 접근할 수 없습니다. 목표에 접근하기 위해서는 우선 선임자에 접근해야 합니다. 선임자에 접근하기 위해서는 또 그 선임자에 먼저 접근해야 합니다. 즉, 이름에서도 알 수 있듯이 모든 접근은 순차적으로 이루어집니다. 그중에서도 연결 리스트의 접근은 마치 반복자와 유사합니다. 첫 ...Mar 22, 2025·2 min read·16
[TypeScript] 자료 구조로 담아내기. #7 - 배열(with. 정렬 유지)이번 편은 이전 편으로부터 이어집니다. 지난 편에서 다룬 이진 탐색은 정렬되지 않은 배열을 대상으로 사용할 수 없습니다. 그렇다면 배열을 어떻게 정렬 상태로 유지할 수 있을까요? 가장 가까운 후임자 찾기 정렬 상태를 유지함은 삽입이 임의의 위치가 아닌 적절한 위치에 되어야 함을 의미합니다. 그럼 적절한 위치를 어떻게 결정할 수 있을까요? 새 요소의 위치는 현재 이보다 후임자이면서 가장 가까운 위치에 있어야 합니다. 이는 이진 탐색을 조금 변형...Mar 15, 2025·3 min read·21
[TypeScript] 자료 구조로 담아내기. #6 - 배열(with. 이진 탐색)이번 편은 이전 편으로부터 이어집니다. 선형 탐색은 소규모 시스템에서는 충분히 빠릅니다. 하지만 대규모 시스템에서는 충분치 않을 수 있습니다. 일반적으로 배열을 정렬된 상태로 유지하면 더 빠른 속도의 탐색 알고리즘을 선택할 수 있습니다. 이진 탐색 이진 탐색은 정렬된 배열에서 선택할 수 있는 대표적인 탐색 알고리즘입니다. 이진 탐색은 목표가 아닌 대상을 범위로 소거하여 탐색 범위를 매우 빠르게 좁혀 나갈 수 있습니다. function bina...Mar 8, 2025·2 min read·17
[TypeScript] 자료 구조로 담아내기. #5 - 배열(with. 선형 탐색)이번 편은 이전 편으로부터 이어집니다. 배열에서 원하는 요소의 위치를 찾아내기 위해서는 어떻게 해야 할까요? 이런 상황에서 사용하는 연산을 탐색이라고 합니다. 선형 탐색 선형 탐색은 가장 단순하게 탐색을 수행하는 방법입니다. 배열의 시작부터 끝까지 목표를 찾을 때까지 순차적으로 탐색을 수행합니다. function linearSearch<T>( l: number, r: number, cmp: (i: number) => bo...Mar 1, 2025·1 min read·12
[TypeScript] 자료 구조로 담아내기. #4 - 배열(with. 시프트)이번 편은 이전 편으로부터 이어집니다. 삽입과 삭제를 수행할 때는 일정 구간을 밀어내거나 당겨오게 됩니다. 이러한 연산을 일반적으로 시프트라 부릅니다. 왼쪽 시프트 function shl(mem: any[], l: number, r: number): void { for(let i = l; i <= r; i++) { mem[i - 1] = mem[i]; } } 왼쪽 시프트는 지정된 메모리 mem 중 l과 r로 지정된 범위를 왼쪽으로 한...Feb 22, 2025·2 min read·17