TIL(2023.08.25)

최장범·2023년 8월 25일
0

TIL

목록 보기
15/50

오늘의 공부내용

===알고리즘 및 람다===
1.람다에 대해서 (자세히...)

  • 람다는 메서드로 전달할 수 있는 익명 함수를 단순화한것
  • 람다의 특징은 일회성! 함수의 선언부가 없으므로 한번 사용하면 끝!
  • 메서드의 이름없이 메서드를 만들수 있다.
형식: (parameter_list) => expression
- =>연산자는 입력 연산자이다. 그저 매개변수를 전달하는 역할
  • 람다식의 장점은 코드가 간결해 진다는 점!
  • 람다식으로 만드는 익명 메소드를 무명 함수(Anonymous Function)이라고 부른다.
    -익명 메소드를 만드려면 Delegate(대리자)가 필요하다.
  • 익명 메소드와 람다식의 차이
//익명 메소드
static void Main (string[] args)
{
	Calculate calc = delegate(int a, int b)
    					{
                        	return a+b;
                        }
}

//람다식
delegate int Calculate(int a, int b);
static void Main(string[] args)
{
	//c# 컴파일러가 형식 유추(Type Inference) 제공
	Calculate calc = (a, b ) => a + b; 
}

-문장을 람다식에 적고 싶을 경우

delegate void Dosomethin();

static void Main (string[] args)
{
	DoSomething Doit = () => //매개변수가 없기때문에 아무것도 넣지 않음.
    	{
    		Console.WriteLine("첫번째 문장");
            Console.WriteLine("두번째 문장");
            Console.WriteLine("세번째 문장");
    	}
        
    Doit();
}

2.정렬 알고리즘

  • 선택 정렬 (Selection Sort)
    -배열에서 최소값 또는 최대값을 찾아 맨앞 또는 맨뒤와 교환 하는 방법
    -시간복잡도: 최악과 평균 모두 O(n^2)
    -공간복잡도: O(1) = 상수 크기의 추가 공간이 필요하지 않음
  • 삽입 정렬 (Insertion Sort)
    -정렬되지 않은 부분에서 요소를 가져와 정렬된 부분에 적절한 위치에 삽입하는 방법
    • 시간복잡도
      -최악: O(n^2)
      -정렬되어 있는 경우에 O(n)
    • 공간복잡도
      -O(1) =상수 크기의 추가 공간이 필요하지 않음
  • 퀵 정렬 (Quick Sort)
    -피벗을 기준으로 작은요소들은 왼쪽, 큰요소들은 오른쪽으로 분할하고 재귀적으로 정렬하는 방법

    • 시간 복잡도
      -최악: O(n^2)
      -평균: O(n log n)
    • 공간 복잡도
      -최악: O(n) (재귀호출에 필요한 스택공간)
      -평균: O(log n)
  • 병합 정렬 (Merge Sort)
    -병합 정렬은 배열을 반으로 나누고, 각 부분을 재귀적으로 정렬한후, 병합하는 방법입니다

    • 시간 복잡도
      -모든경우에 O(n log n)
    • 공간복잡도
      -O(n) (정렬을 위한 임시 배열이 필요함)

오늘 공부한 것에 대한 생각

1.어제 Delegate에 이어 람다를 공부한것처럼 이해가 가지 않는 개념에 대해 시간을 많이 투자해서 정확히 알려하는 노력은 분명히 의미가 있는것 같다.
2.알고리즘은 항상 어렵고 새롭지만 이번에도 역시 글자 그대로 이해하는 것은 가능하지만 실제로 내가 구현을 하거나 코딩테스트가 주어졌을때 스스로의 힘으로 풀 수 있냐고 물었을 때의 대답은 아직은 'NO' 인것 같다. 강의를 반복해서 들으며 사이드 프로젝트나 과제들에서 직접 구현하며 이해하는 노력을 하자.
3.알고리즘을 공부할때 좋은 방법

  • 노트와 펜을 이용해보는것
  • 다른 사람들이 만들어둔 코드를 보는것 (매우중요)

0개의 댓글