하랑이 코딩

c# 10

알고리즘 - 퀵정렬(quick sort) c#

퀵정렬(quick sort) 특정한 값을 기준으로 큰 숫자와 작은 숫자를 나누면 어떨까? 해서 나온 답이 >> 퀵정렬은 피봇을 기준으로 작거나 같은 값을 지닌 데이터는 앞으로, 큰 값을 지닌 데이터는 뒤로 가도록 하여 작은 값을 갖는 데이터와 큰 값을 갖는 데이터로 분리해 가며 정렬하는 방법입니다.퀵정렬 과정 피벗 선택: 배열에서 하나의 원소(피벗)를 선택합니다.분할: 피벗보다 작은 원소들은 왼쪽으로, 큰 원소들은 오른쪽으로 이동시키는 방식으로 배열을 재배열합니다.재귀적 정렬: 피벗을 제외한 왼쪽과 오른쪽 부분 배열에 대해 같은 과정을 재귀적으로 반복합니다. 퀵정렬(quick sort) 이론이제 아래 사진과 함께 설명해 보겠습니다.그림에 있는 피봇을 기준으로 보면서 위에 글을 확인하시고 특정한 값을 기..

알고리즘 - 삽입정렬(insertion sort) c#

삽입정렬(insertion sort)각 숫자를 적절한 위치에 삽입하면 어떨까? 해서 나온 답이 >> 삽입 정렬은 앞의 숫자가 나보다 큰지 비교하면서 자신의 위치에 삽입하는 정렬 방법삽입정렬 과정첫 번째 원소는 이미 정렬된 것으로 간주하고, 두 번째 원소부터 시작합니다.현재 정렬된 부분과 비교하면서 적절한 위치에 삽입합니다.배열의 끝까지 이 과정을 반복합니다. 삽입정렬(insertion sort) 이론이제 아래 사진과 함께 설명해보겠습니다.그림에 있는 빨간색을 기준으로 보면서 위에 글을  확인하시고각 숫자를 적절한 위치에 삽입하면 어떨까? 를 기억하시면 이해가 잘 될 겁니다.  삽입정렬(insertion sort) 코드using System;using System.Collections.Generic;cla..

알고리즘 - 버블정렬(bubble sort) c#

버블정렬(bubble sort)옆에 있는 값과 비교해서 더 작은 값을 앞으로 보내면 어떨까? 해서 나온 답이 >> 버블 정렬은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내는 정렬방식이다. 버블정렬 과정첫 번째 데이터와 두 번째 데이터를 비교하여 첫 번째 값이 더 크면 두 번째 데이터와 교환한다.두 번째 데이터와 세 번째 데이터를 비교하여 더 큰 수를 뒤로 보낸다.이렇게 끝까지 진행하면, 제일 큰 숫자가 맨 뒤로 가게 된다. 이렇게 계속 처음부터 n-1번째 데이터를 비교해서 정렬하는 알고리즘이다. 버블정렬(bubble sort) 이론지금 아래사진 선택 정렬 해보겠습니다.    그림처럼 총 5번 반복하면 1,2,3,4,5로 정렬이 됩니다.바로 위에서 설명한 것처럼 옆에 있는 값과 비교해..

알고리즘 - 선택정렬(selection sort) c#

선택정렬(selection sort)가장 작은 것을 선택해서 제일 앞으로 보내면 어떨까? 해서 나온 답이 >> 선택 정렬은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해 나가는 방식이다. 선택정렬 과정리스트에서 최소값을 찾는다.최소값을 맨 앞의 값과 교체한다. (Swap)교체한 맨 앞의 데이터는 정렬된 것으로 간주하고 다음 인덱스부터 1, 2 행위를 끝까지 반복한다. 선택정렬(selection sort) 이론한번 지금 아래사진 선택 정렬 해보겠습니다. 지금 아래사진처럼 5와 1에 위치를 변경했습니다.이 과정을 계속해보겠습니다.   이렇게 선택정렬이 다 되었습니다. 이제 그림으로 다 봤으니 코드로 보겠습니다  선택정렬(selection sort) 코드using Syste..

알고리즘 - 재귀호출(recursive call) c#

재귀호출(recursive call)이란?재귀호출(recursive call)이란 함수 내부에서 자기 자신을 반복적으로 호출하는 것을 의미한다. 반복 행위를 하는 함수를 재귀호출(recursive call)라고 한다. 일반적인 상황에서는 잘 사용하지 않지만 알고리즘을 구현할 대 매우 유용하다.알고리즘에 따라서 반복문으로 구현한 코드보다 재귀호출(recursive call)로 구현한 코드가 더 직관적이고 이해하기 쉽다.복잡한 문제를 빠르고 쉽게 해결할 수 있다.  꼭 알아야 하는 지식!  재귀호출(recursive call)재귀호출은 반드시 중지되어야 한다.재귀호출로 문제를 해결할 수 있는지 잘 고민해야 한다. 재귀호출(recursive call) 이론아래 사진은 팩토리얼로 예시를 들어 만든 사진입니다.현..

선형 자료구조 - 스택(Stack) c#

스택(Stack)이란? C#에서의 스택은 후입선출(LIFO) 방식으로 데이터를 저장하는 자료 구조입니다. 요소를 추가하고 제거할 때는 맨 위(top)에서만 가능합니다. 꼭 알아야 하는 지식! 스택(Stack)후입선출 - 후입선출(LIFO)은 가장 나중에 들어온 데이터가 먼저 나가는 자료 구조의 원리를 나타냅니다. 탑(top) - "top"은 스택의 맨 위에 위치한 요소를 가리키는 포인터 역할을 합니다. 팝(pop) "팝(pop)"은 스택에서 맨 위에 있는 요소를 제거하는 작업을 의미합니다. 푸시(push) "푸시(push)"는 스택의 맨 위에 새로운 요소를 추가하는 작업을 의미합니다.  스택(Stack) 이론일단 스택을 사용하기 위해서 위 지식들 중 몇 가지를 꼭 알아야 합니다.후입선출, 탑(top), ..

선형 자료구조 - 연결 리스트(LinkedList) c#

리스트란?C#의 리스트(List)는 System.Collections.Generic 네임스페이스의 List 클래스를 사용하여 다양한 타입의 데이터를 순차적으로 저장하고 관리할 수 있는 유연한 제네릭 컬렉션입니다. 꼭 알아야 하는 지식! 리스트ArrayList - 내부적으로 배열을 사용LinkedList - 링크 포인터를 사용List - 제너릭 타입 배열의 특징생성 시 사용할 공간을 미리 할당한다.인덱스를 사용 데이터 접근에 빠르다.데이터의 크기를 변경하지 못한다. 리스트특징데이터의 추가 삭제가 자유롭다.생성 시 크기를 지정하지 않는다.리스트를 다른 말로 Dynamic Array라고 부른다. 박싱(Boxing)값 형식을 참조 형식으로 변환하는 것 언박싱(Unboxing)참조  형식을 값 형식으로 변환하는 ..

선형 자료구조 - 리스트(List<T>) c#

리스트란?C#의 리스트(List)는 System.Collections.Generic 네임스페이스의 List 클래스를 사용하여 다양한 타입의 데이터를 순차적으로 저장하고 관리할 수 있는 유연한 제네릭 컬렉션입니다. 꼭 알아야 하는 지식! 리스트ArrayList - 내부적으로 배열을 사용LinkedList - 링크 포인터를 사용List - 제너릭 타입 배열의 특징생성 시 사용할 공간을 미리 할당한다.인덱스를 사용 데이터 접근에 빠르다.데이터의 크기를 변경하지 못한다. 리스트특징데이터의 추가 삭제가 자유롭다.생성 시 크기를 지정하지 않는다.리스트를 다른 말로 Dynamic Array라고 부른다. 박싱(Boxing)값 형식을 참조 형식으로 변환하는 것언박싱(Unboxing) 참조  형식을 값 형식으로 변환하는 ..

선형 자료구조 - 리스트(ArrayList) c#

리스트란? C#의 리스트(List)는 System.Collections.Generic 네임스페이스의 List 클래스를 사용하여 다양한 타입의 데이터를 순차적으로 저장하고 관리할 수 있는 유연한 제네릭 컬렉션입니다. 리스트ArrayList - 내부적으로 배열을 사용LinkedList - 링크 포인터를 사용List - 제너릭 타입  배열의 특징생성 시 사용할 공간을 미리 할당한다.인덱스를 사용 데이터 접근에 빠르다.데이터의 크기를 변경하지 못한다.  리스트특징데이터의 추가 삭제가 자유롭다.생성 시 크기를 지정하지 않는다.리스트를 다른 말로 Dynamic Array라고 부른다. ArrayList 사용법list.Add사용법using System;namespace MyCompiler { class Progr..

선형 자료구조 - 배열(Array) c#

배열이란?배열은 하나의 데이터 타입을 가지는 여러 개의 값들을 저장합니다. 예를 들어, 정수형 배열에는 정수만 저장할 수 있습니다. 배열 전체 코드using System;namespace MyCompiler { class Program { public static void Main(string[] args) { string coffeeA = "A커피"; string coffeeB = "B커피"; string coffeeC = "C커피"; Console.WriteLine(coffeeA); Console.WriteLine(coffeeB); Console.WriteLine(c..