목 차
네임드 튜플
퀘스트 저장 메커니즘을 임시로 int[,]의 정수형 이차원배열로 만들었는데 다른 사람들까지 알아보기 쉽게 만드려면 이 방법을 쓰라 하셔서 배워본다.
정의
네임드 튜플은 각 요소에 이름을 지정해서 데이터를 다룰 때 더 명확하고 이해하기 쉽게 한다. 배열로는 사용할 수 없고, List 같은 걸로 사용할 수 있다.
사용방법
List<(string Name, int Age)> people = new List<(string, int)>
{
("John", 30),
("Mary", 25)
};
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
이런 식으로 네임드 튜플을 사용하면 " .(내가 만든 이름) " 으로 후에 불러올 수 있으니 확실히 가독성이 올라간다.
본문내용넣기
활용
선언:
List<(string QuestType, int QuestNumber, int CurrentProgress)> QuestSave;
불러오기:
// 첫 번째 요소의 QuestType을 가져옵니다.
string type = QuestSave[0].QuestType;
// 첫 번째 요소의 QuestNumber을 가져옵니다.
int number = QuestSave[0].QuestNumber;
// 첫 번째 요소의 CurrentProgress를 가져옵니다.
int progress = QuestSave[0].CurrentProgress;
수정하는 법:
// 기존 튜플을 가져와서 일부 값만 변경
var oldQuest = QuestSave[0];
var newQuest = (oldQuest.QuestType, QuestNumber: 3, oldQuest.CurrentProgress);
// 리스트에서 해당 요소를 새로운 튜플로 대체
QuestSave[0] = newQuest;
정렬 알고리즘
오늘 본 배치고사에 정렬 알고리즘이 나왔는데 기억이 도통 안나 억지로 작동하게 만들어 제출했었다.
병합정렬 시도하다가 기억이 잘 안나 그냥 제출한게 자존심 상해서 다시 공부한다.
이곳의 정렬 시리즈 4개는 모두 C#문법종합반 강의 노션에 올라온 것을 기준으로 했다.
내가 사용한 방법
public static void Sort(int[] Array)
{
List<int> list = new List<int>();
list.Add(Array[0]);
for (int i = 1; i < Array.Length; i++)
{
int left = 0; int right = list.Count - 1;
do
{
if (Array[i] > list[left])
{
left++;
}
if (Array[i] < list[right])
{
right--;
}
}while (left <= right);
list.Insert(left, Array[i]);
}
foreach (int i in list)
Console.Write(i + " ");
Console.WriteLine();
}
정렬들의 차이가 정확히 뭔지 몰라 일단 삽입이라 생각하고 넘겼는데 곰곰이 생각해보니 삽입이 아니라 선택인거 같기도 하다... 혹은 둘 다 아닐수도 있고?
이게 무슨 정렬이라 할 수 있는지 아시는 분은 댓글 바람!
아무튼 정렬이 되기만 하면 되는거 아닌?가 라고 생각한다.
선택 정렬
int[] arr = new int[] { 5, 2, 4, 6, 1, 3 };
for (int i = 0; i < arr.Length - 1; i++) //배열 모든 요소 정리될 때까지.
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
minIndex = j; //아직 정렬
}
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
foreach (int num in arr)
{
Console.WriteLine(num);
}
삽입 정렬
int[] arr = new int[] { 5, 2, 4, 6, 1, 3 };
for (int i = 1; i < arr.Length; i++)
{
int j = i - 1;
int key = arr[i];
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
foreach (int num in arr)
{
Console.WriteLine(num);
}
퀵 정렬
void QuickSort(int[] arr, int left, int right)
{
if (left < right)
{
int pivot = Partition(arr, left, right);
QuickSort(arr, left, pivot - 1);
QuickSort(arr, pivot + 1, right);
}
}
int Partition(int[] arr, int left, int right)
{
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++)
{
if (arr[j] < pivot)
{
i++;
Swap(arr, i, j);
}
}
Swap(arr, i + 1, right);
return i + 1;
}
void Swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int[] arr = new int[] { 5, 2, 4, 6, 1, 3 };
QuickSort(arr, 0, arr.Length - 1);
foreach (int num in arr)
{
Console.WriteLine(num);
}
병합 정렬
void MergeSort(int[] arr, int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
MergeSort(arr, left, mid);
MergeSort(arr, mid + 1, right);
Merge(arr, left, mid, right);
}
}
void Merge(int[] arr, int left, int mid, int right)
{
int[] temp = new int[arr.Length];
int i = left;
int j = mid + 1;
int k = left;
while (i <= mid && j <= right)
{
if (arr[i] <= arr[j])
{
temp[k++] = arr[i++];
}
else
{
temp[k++] = arr[j++];
}
}
while (i <= mid)
{
temp[k++] = arr[i++];
}
while (j <= right)
{
temp[k++] = arr[j++];
}
for (int l = left; l <= right; l++)
{
arr[l] = temp[l];
}
}
int[] arr = new int[] { 5, 2, 4, 6, 1, 3 };
MergeSort(arr, 0, arr.Length - 1);
foreach (int num in arr)
{
Console.WriteLine(num);
}
'Software Engineering > Computer Science' 카테고리의 다른 글
[C++] 우선순위 큐 (0) | 2024.10.03 |
---|---|
[C#] 리스트 복사, SetCursor (0) | 2024.05.03 |
[C#] 클래스, 직렬화, 메서드 수식자 (0) | 2024.04.28 |
[C++, C#] C#과 다른 컴퓨터 언어의 차이점들5~7(完) (0) | 2024.04.02 |
[C++, C#] C#과 다른 컴퓨터 언어의 차이점들3~4 (0) | 2024.04.01 |