반응형
동적 배열 구현
1. 기본 설정
class MyList<T>
{
const int DEFAULT_SIZE = 12;
T[] _data = new T[DEFAULT_SIZE];
public int Count=0; // 실제로 사용중인 데이터 개수
public int Capacity { get { return _data.Length; } } // 예약된 데이터 개수
}
2. Add
public void Add(T item)
{
// 1. 공간이 충분히 남아 있는지 확인
if(Count >= Capacity)
{
// 공간을 다시 늘려서 확보
T[] newArray = new T[Count * 2];
for (int i = 0; i < Count; i++)
newArray[i] = _data[i];
_data = newArray;
}
// 2. 공간에데가 데이터를 넣어준다.
_data[Count] = item;
Count++;
}
시간 복잡도 : O(1)
요소 이동은 무시한다.
3. Indexer
public T this[int index]
{
// indexer를 통해 데이터 가져오기
get { return _data[index]; }
// indexer를 통해 데이터 할당
set { _data[index] = value; }
}
예시
MyList<int> myList = new MyList<int>();
myList[0] = 5; // set : 인덱스 0에 5를 할당
int value = myList[0]; // get : 인덱스 0의 값 읽기
시간 복잡도 : O(1)
4. RemoveAt
public void RemoveAt(int index)
{
// 이사한 친구를 기준으로 한칸씩 땡겨주기
// 101 102 103 104 105인데 102를 뺀다고 치면 103,104,105를 앞으로 땡겨주면된다.
for(int i = index; i<Count -1;i++)
{
_data[i] = _data[i + 1];
}
// 그러면 101 103 104 105 105 이렇게 되므로 데이터를 제거해주기 위해 default사용
// 제네릭 타입 T형식인 경우에는 0으로 초기화되고 참조 타입(class)이면 null로 초기화된다.
_data[Count-1] = default(T);
Count--;
}
시간복잡도 : O(N)
데이터 크기에 비례한 루프를 돌므로 시간복잡도는 O(N)이다.
참고 : 본 내용은 MMORPG PART2 강의를 수강하여 작성하였습니다.
반응형
'코딩테스트 준비 > 자료구조 & 알고리즘' 카테고리의 다른 글
C# - 문자열로 이루어진 리스트 요소들을 정수로 바꾸는법 +) 지연 평가(Lazy Evaluation) (0) | 2023.09.01 |
---|---|
C# - IEnumerable설명 및 메서드(MIN,MAX,Average등) (0) | 2023.08.28 |
C# - 배열, 동적 배열, 연결 리스트 비교 (0) | 2023.08.28 |
C# - 그래프(자료 구조) 이론 (그래프 종류들, 다양하게 코드로 구현해보기) (0) | 2023.07.13 |
C# - 큐(Queue) (0) | 2023.07.13 |
댓글