퀵 정렬 ( Quick Sort )
·
📊Algorithm/정렬
퀵 정렬 ( Quick Sort )퀵 정렬은 분할 정복 ( Divide and Conquer ) 방법을 사용하는 정렬 알고리즘이다.배열에서 피벗 ( Pivot )을 선택하고 , 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할한다.이 과정을 재귀적으로 반복하여 정렬한다.배열에서 기준값 피벗 ( pivot )을 하나 정한다피벗보다 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 보낸다이렇게 나뉜 두 구간을 다시 퀵 정렬로 정렬한다더 이상 나눌 수 없을 때까지 재귀적으로 반복한다 동작 과정1. 배열에서 하나의 원소를 피벗 ( pivot )으로 선택한다.2. 피벗보다 작은 원소들은 왼쪽 , 큰 원소들은 오른쪽에 배치한다.3. 피벗을 제외한 왼쪽 부분 배열과 오른쪽 부분 배열을 재귀적으로 정렬한다.4. 더 ..
피셔 예이츠 셔플 ( Fisher Yates Shuffle )
·
📊Algorithm/셔플
피셔 예이츠 셔플 ( Fisher Yates Shuffle )피셔 예이츠 셔플은 배열이나 리스트의 원소들을 무작위 ( Random )로 섞는 알고리즘이다.모든 가능한 순열이 동일한 확률로 발생하도록 보장한다는 특징이 있다.피셔 예이츠 셔플은 처음 기술한 로널드 피셔와 Frank Yates 의 이름을 따서 명명되었다.도널드 커누스의 이름을 따서 커누스 셔플이라고 부르기도 한다.배열의 끝에서부터 앞으로 이동하면서,현재 위치 i 와 0 ~ i 사이 임의의 위치 j 를 뽑는다.arr[ i ] 와 arr [ j ] 를 교환한다.배열의 처음까지 진행하면, 전체 배열이 무작위로 섞인다. 동작 과정1. 배열의 끝에서 시작한다. ( i = n - 1 )2. 현재 인덱스 i 와 0 ~ i 사이의 무작위 인덱스 j 를 선..
삽입 정렬 ( Insertion Sort )
·
📊Algorithm/정렬
삽입 정렬 ( Insertion Sort )삽입 정렬은 배열을 앞에서부터 차례대로 보면서, 현재 원소를 알맞은 위치에 삽입하는 방식의 정렬 알고리즘이다.이미 정렬된 부분 배열을 유지하면서, 새로운 원소를 하나씩 삽입하는 방식이라 삽입 정렬이라 부른다.배열의 두 번째 요소부터 시작해앞쪽 정렬된 부분과 비교하며 자신보다 큰 값을 밀어낸 뒤,빈 자리에 현재 값을 삽입한다. 동작 과정예를 들어 [ 5 , 3 , 8 , 4 , 2 ] 를 오름차순 정렬한다고 가정1. 초기 상태- 첫 번째 원소 ( 5 ) 는 이미 정렬된 상태로 간주 2. [ 3 ] 삽입- 5 > 3 → [ 5 ] 에서 [ 3 ] 의 위치를 찾음 → [ 5 ] 앞에 삽입- [ 3 , 5 , 8 , 4 , 2 ] 3. [ 8 ] 삽입- [ 3 , 5..
선택 정렬 ( Selection Sort )
·
📊Algorithm/정렬
선택 정렬 ( Selection Sort )선택 정렬은 배열에서 가장 작은 값을 찾아 맨 앞자리와 교환하는 방식으로 정렬하는 알고리즘이다.이 과정을 배열이 끝날 때까지 반복해서 전체를 정렬한다.즉, 매 단계마다 "최소값을 선택"해서 앞으로 보내는 방식이기 때문에 선택 정렬이라 부른다.현재 위치에서부터 배열 끝까지 순회하면서가장 작은 값을 찾아내고,그 값을 현재 위치에 있는 값과 교환한다. 동작 과정예를 들어 [ 5 , 3 , 8 , 4 , 2 ] 를 오름차순으로 정렬한다고 가정1. 첫번째- 전체 배열에서 최소값 찾기 → 2- 첫 번째 원소 ( 5 ) 와 자리 교환 → [ 2 , 3 , 8 , 4 , 5 ] 2. 두번째- 나머지 [ 3 , 8 , 4 , 5 ] 중 최소값 찾기 → 3- 현재 자리에 그대로..
버블 정렬 ( Bubble Sort )
·
📊Algorithm/정렬
버블 정렬 ( Bubble Sort )버블 정렬은 가장 단순한 정렬 알고리즘 중 하나로,인접한 두 원소를 비교하여 교환하면서 큰 값 ( 또는 작은 값 ) 을 점점 뒤로 보내는 방식이다.마치 거품 ( Bubble )이 물 위로 올라가는 것처럼 가장 큰 값이 뒤로 밀려나기 때문에 "버블 정렬"이라고 부른다.인접한 두 값을 비교앞의 값이 더 크면 서로 위치 바꾼다이 과정을 배열 끝까지 반복가장 큰 값이 끝에 도달하면 그 범위를 제외하고 다시 반복 동작 과정예를 들어 [ 5 , 3 , 8 , 4 , 2 ] 라는 배열을 오름차순 정렬한다고 가정1. 첫번째 - 5 와 3 비교 → 자리 바꿈 → [ 3 , 5 , 8 , 4 , 2 ]- 5 와 8 비교 - 8 과 4 비교 → 자리 바꿈 → [ 3 , 5 , 4 , 8..
알고리즘 ( Algorithm )
·
📊Algorithm
알고리즘 ( Algorithm )알고리즘 ( Algorithm ) 은 문제를 해결하는 방법을 순서대로 정리한 것이다.하나의 문제를 어떻게 풀 것인지에 대한 명확하고 순차적인 설명이며, 이를 바탕으로 프로그램을 작성한다.컴퓨터가 어떤 작업을 하려면, 사람이 이해할 수 있는 레시피 ( 조리법 ) 같은 지침이 필요하다.그 레시피가 바로 알고리즘이다. 알고리즘을 쉽게 이해하는 방법요리 레시피와 같다.입력 : 재료 ( 감자 , 기름 , 소금 )과정 : 감자를 깎고 칼로 썰어서 기름에 튀기고 소금을 뿌린다출력 : 완성된 감자튀김즉, 입력을 받아서 정해진 순서 ( 절차 ) 를 거치면 원하는 출력이 나온다. 알고리즘의 특징1. 명확성 ( 명시성 , Definiteness )각 단계는 애매하지 않고, 누구나 이해할 ..
250926
·
📖TIL
// KISS 원칙 // Keep It Simple Stupid : 단순무식하게 유지해라 // DRY 원칙 // Don't Repeat Yourself : 중복 코드를 제거하여 효율적으로 작성해라 // YAGNI 원칙 // You Aren't Gonna Need It : 지금 필요하지 않은 건 만들지 마라 public static void InsertionSort(int[] arr){ int n = arr.Length; for (int i = 1; i = 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; }}// 삽입 정렬// Insertion..
250926 알고리즘
·
📖TIL
문제를 해결하기 위한 과정을 논리적 절차에 따라 구성한 일련의 단계문제 이해 → 예시와 테스트 케이스 작성 → 알고리즘 설계 → 알고리즘 구현 및 검증 → 알고리즘 분석과 개선 Fisher Yates Shuffle/// /// 카드 섞어주는 기능/// /// 섞이지 않은 카드배열 public static void FisherYatesShuffle(int[] inputArr){ Random rnd = new Random(); // 섞을거니 랜덤을 만듦 for ( int i = inputArr.Length - 1; i > 0; i-- ) // 인덱스 역순 { int j = rnd.Next(0, i + 1); // 0부터 i까지 랜덤 인덱스 선택 (+1 이유는 0 이상 i 미만이..
250926 Revision
·
📖TIL
// 그래프// 비선형 자료구조// BFS DFS 장단점, 어디에 쓰이면 좋을지// HashTable , Dictionary// Hash 해쉬태그 , #// 데이터를 빠르게 찾기 위해, 특정 규칙에 따라 숫자 ( 위치 )를 반환하는 것// key, ValueHashtable hashtable = new Hashtable();// 딕셔너리랑 작동법이 같은// 오브젝트형으로 기억하기에 문제가 발생hashtable.Add("id", 12);hashtable["name"] = "호찬";hashtable["score"] = 95;// 딕셔너리와 똑같다. 오브젝트를 곁들인..Console.WriteLine(hashtable["name"]);// 개발자라면 안터지고, 실수 없는 코드가 더 좋은 코드// 해쉬함수// ..