배열과 연결리스트는 순차적으로 데이터를 저장한다는 점에서 비슷하다. 두 자료구조에 대해서 알아보자. 배열(Array) 배열은 논리적 저장순서와 물리적 저장순서가 일치하는 자료구조이다. 즉 인덱스(index)로 해당 원소에 접근 할 수 있다. 따라서 원소의 인덱스값을 이용하면 O(1)에 해당 원소에 접근 할 수 있다. 그러나 삭제 또는 삽입의 과정에서 추가적인 시간이 소요될 수 있다. 예를 들어 아래와 같은 상황에서 배열의 첫번째 자리(Arr[0])에 새로운 원소를 추가한다고 하자. 위와 같은 상황에서 Arr[0] 에 데이터 10을 추가하기 위해서는, Arr[0] 부터 Arr[4] 까지 모든 원소가 한 칸 씩 오른쪽으로 이동하게 된다. 즉, 원소를 삽입할 때 최악의 경우 모든 원소들을 1씩 옮기는 작업이 ..
정의 Divide and Conquer(분할정복)은 해결하기 힘든 큰 문제를 작은 문제로 분할하여 해결(정복)한 후 병합하는 알고리즘이다. 접근법 분할정복은 보통 다음과 같은 3단계의 과정을 거친다. 1. Divide(분할) : 문제를 더 작은 문제들로 분할 2. Conquer(정복) : 분할한 작은 문제들을 해결한다. 3. Combine(병합) : 작은 문제들의 해결법을 병합해 큰 문제의 해결법을 찾는다. 특징 1. 문제를 나눌 때 보통 재귀(recursion)를 많이 사용한다. 2. 재귀(recursion)를 이용할 때 오버헤드가 커 메모리를 많이 사용할 수 있다. 예시 Merge Sort(병합 정렬) 병합 정렬은 분할정복의 대표적인 예이다. n개의 데이터를 가진 배열을 오름차순으로 정렬하기 위해 병..
연결리스트(Linked List)란? -연결리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. - 각 노드는 다음 노드를 가리키는 포인터를 포함한다. - 다음 노드를 가리키는 포인터는 다음 노드의 주소를 값으로 가지고 있다. - 각 노드의 포인터 변수는 다음 노드의 데이터의 주소를 값으로 가진다. 또한 각 포인터 변수의 주소도 따로 존재한다. (그림에 나타난 주소는 정확하지 않다. 이해를 돕기 위해 임의로 설정했다. 실제 주소값은 저런식으로 저장되지 않는다) 단순연결리스트(Singly Linked List)의 구현 가장 간단한 연결리스트인 단순 연결리스트를 구현해보자. 여러 구현 방법이 있지만, 아래 내용들을 응용하면 다양한..