C#의 팀 프로젝트를 진행하면서 C# 문법종합반 강의를 정리하는 건 힘드네요.
오늘은 팀 프로젝트의 회의 및 필수 기능구현을 한번 해보았습니다.
기능 하나를 만들어서 테스트하면 문제가 보이고 그걸 고치고 다시 테스트하면 다른 문제가 보이고
이걸 반복하다보니 벌써 하루가 끝나 갑니다. 그래도 열심히 TIL을 작성해보겠습니다.
탐색 알고리즘 ( Search Algorithm )
주어진 데이터나 자료구조에서 원하는 값을 찾는 과정.
데이터를 효율적으로 탐색하는 것은 데이터베이스, 검색 엔진, 게임 개발, 인공 지능 등 다양한 분야에서 필요한 기능.
선형 탐색 ( Linear Search )
간단한 탐색 알고리즘 중 하나.
리스트나 배열과 같은 자료구조에서 특정 값을 찾기 위해 순차적으로 요소를 검색하는 방법.
데이터가 정렬되어 있지 않거나, 특정한 조건이 없는 한 가지 상황에서 사용.
static int LinearSearch(int[] arr, int target) { for (int i = 0; i < arr.Length; i++) { if (arr[i] == target) { return i; // 값을 찾은 경우 해당 인덱스 반환 } } return -1; // 값을 찾지 못한 경우 -1 반환 }
이진 탐색 ( Binary Search )
정렬된 리스트나 배열에서 특정 값을 빠르게 찾는 알고리즘.
이진 탐색은 선형 탐색보다 훨씬 효율적으로 작동하며, 탐색 범위를 반으로 줄이는 방식으로 동작.
데이터의 중간 값을 확인하고 찾고자 하는 값과 비교하여 찾고자 하는 값을 찾을 때까지 탐색 범위를 조절.
이진 탐색은 탐색 범위를 반씩 줄이므로, 시간 복잡도는 O(log n).
static int BinarySearch(int[] arr, int target) { int low = 0; int high = arr.Length - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == target) { return mid; // 값을 찾은 경우 해당 인덱스 반환 } else if (arr[mid] < target) { low = mid + 1; // 중간 값보다 작은 경우 탐색 범위를 오른쪽으로 조절 } else { high = mid - 1; // 중간 값보다 큰 경우 탐색 범위를 왼쪽으로 조절 } } return -1; // 값을 찾지 못한 경우 -1 반환 }
그래프 ( Graph )
다양한 객체들 간의 관계를 표현하는 추상적인 자료 구조.
노드(node)나 정점(vertex)들의 집합과 이들을 연결하는 간선(edge)들의 집합으로 구성.
그래프의 종류
그래프 탐색 방법
깊이 우선 탐색 (Depth-First Search, DFS)
• 시작 노드에서부터 출발하여 한 경로를 따라 가능한 멀리까지 탐색
• 더 이상 진행할 수 없을 때, 이전 노드로 돌아가서 다른 경로로 계속 탐색
• 스택(stack)이나 재귀(recursion)를 이용하여 구현할 수 있음
• 그래프 내의 사이클을 탐지하거나, 연결 요소의 개수를 파악하는 데 유용
• 시간 복잡도: 최악의 경우 O(V+E) (V는 노드 수, E는 간선 수)
너비 우선 탐색 (Breadth-First Search, BFS)
• 시작 노드에서부터 출발하여 현재 노드와 인접한 노드들을 먼저 탐색
• 같은 레벨의 노드들을 먼저 탐색한 후, 다음 레벨로 넘어감
• 큐(queue)를 이용하여 구현할 수 있음
• 최단 경로를 찾거나, 두 노드 간의 거리를 계산하는 데 유용
• 시간 복잡도: 최악의 경우 O(V+E) (V는 노드 수, E는 간선 수)
최단 경로 알고리즘 ( Shortest path problem )
그래프 내에서 두 노드 사이의 최단 경로를 찾는 문제를 해결하는 알고리즘
노드
그래프에서 기본적인 구성 요소로, 그래프 내의 한 지점을 나타냄.
노드는 다양한 이름으로 불리며, 정점(Vertex)이라고도 부름.
간선
그래프에서 노드들을 연결하는 선.
노드 간의 관계를 표현.
그래프의 구조를 형성하며, 노드들 간의 연결 정보를 저장.
방향성 여부와 가중치 여부에 따라 다양한 종류가 있음.
트리
최단 경로 알고리즘 종류
다익스트라 알고리즘 (Dijkstra's Algorithm)
음의 가중치가 없는 그래프에서 사용 가능하며, 간선의 가중치는 반드시 양수여야 함
그리디 알고리즘의 일종으로, 탐욕적으로 최단 거리를 업데이트해 나감
벨만-포드 알고리즘 (Bellman-Ford Algorithm)
음의 가중치가 있는 그래프에서도 사용 가능하며, 음의 가중치 사이클을 포함
동적 프로그래밍을 활용하여 최단 거리를 계산
플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)
음의 가중치가 있는 그래프에서도 사용 가능하며, 음의 가중치 사이클을 포함할 수 있음
동적 프로그래밍을 활용하여 모든 노드 쌍 간의 최단 거리를 계산
09:00 ~ 10:00 : 알고리즘 코드카타
10:00 ~ 10:30 : 팀 회의
10:30 ~ 14:00 :
12시-1시: 점심식사
14:00 ~ 18:00
6시-7시: 저녁식사
19:00 ~ 20:00 : 집중 코딩 시간 부족한 부분 해결해보기
20:00 ~ 21:00: TIL 작성, 마무리 회고 진행
21:00 : 내일은 위한 휴식!