목 차
네임드 튜플
퀘스트 저장 메커니즘을 임시로 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 | 
