[알고리즘] 이진탐색
·
Computer Science/Algorithm
이진탐색이란?이진탐색(Binary Search)은 정렬된 배열에서 특정 값을 찾거나, 그 값이 위치할 수 있는 인덱스를 찾는 데 매우 효율적인 알고리즘이다.즉, 최적의 값이나 인덱스의 위치를 찾는데 유용하다.이진탐색의 종류 1. 값이 삽입될 인덱스를 이진탐색하는 경우목적: 특정 값이 위치할 수 있는 배열의 인덱스를 찾는 것.방법: 배열에서 중간 인덱스를 선택하고, 찾고자 하는 값과 중간 인덱스의 값을 비교한다. 찾고자 하는 값이 중간 인덱스 값보다 작다면, 배열의 왼쪽 절반을 검색하고, 크다면 오른쪽 절반을 검색한다. 이 과정을 반복하여 값을 찾거나, 값을 찾지 못하는 경우 해당 값이 위치할 수 있는 인덱스를 반환한다.def binary_search_index(arr, target): left, r..
[알고리즘] 위상 정렬 (Topological Sorting)
·
Computer Science/Algorithm
위상 정렬 (Topological Sorting)이란?정렬 알고리즘의 일종으로, 순서가 정해져있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다.사이클이 없는 방향 그래프(DAG)의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열하는 것'을 의미한다. 예시그림과 같이 총 3개의 과목이 있다고 가정하자.세 과목을 모두 듣기 위해서는 자료구조 -> 알고리즘 -> 고급 알고리즘 (O) 순서로 과목을 들어야한다.만약 자료구조 -> 고급 알고리즘 -> 알고리즘 (X) 순서로 과목을 듣는다고 가정하자. 해당 순서는 올바른 학습 순서가 아니다. 진입차수와 진출차수위상 정렬 알고리즘을 살펴보기 위해서는 먼저 진입차수와 진출차수에 대한 개념을 알아야한다. 진입차수 (Indegree) : 특정한..
순열, 조합, 중복순열, 중복조합
·
Computer Science/Algorithm
순열 [1,2,3] 중 2개를 뽑아 순열을 만드는 예시 def dfs(level): if level == r: print(result) return for i in range(len(arr)): if checked[i] == True: continue result[level] = arr[i] checked[i] = True # 중복순열이 안되게 -> 앞자릿수에서 선택한 값은 뒤에서 선택될 수 없음. dfs(level + 1) checked[i] = False # 다시 새로운 result를 만들어낼 때 숫자가 선택될 수 있게 print(level, checked) arr = [i + 1 for i in range(3)] r = 2 result = [0] * r checked = [False] * len(a..
C++ 이중 포인터 완벽 이해
·
Computer Science/Algorithm
이중 포인터 포인터를 가리키는 포인터는 다른 포인터의 주소를 보유하는 포인터로 생각하면 된다. 1) 단일 포인터 - int에 대한 일반 포인터 : 하나의 별표(*)만 사용해서 선언 int* ptr; 2) 이중 포인터 - int에 대한 포인터를 가리키는 포인터 : 두개의 별표(**)를 사용해서 선언 int** ptrptr; ▪︎ 단일 포인터와 이중 포인터 사용 예시 int value = 5; int* ptr = &value; cout
_은선_
'Computer Science/Algorithm' 카테고리의 글 목록