기술면접을 위해 기초 CS에 대한 복습중이다.
공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다.
내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의!
이진탐색
- 정렬되어 있는 리스트에서 절반씩 좁혀가며 탐색한다.
- 시작점, 끝점, 중간점을 이용한다.
- 시간 복잡도: $O(logN)$
// 이진 탐색 소스코드 구현(반복문) int binarySearch(vector<int>& arr, int target, int start, int end) { while (start <= end) { int mid = (start + end) / 2; // 찾은 경우 중간점 인덱스 반환 if (arr[mid] == target) return mid; // 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인 else if (arr[mid] > target) end = mid - 1; // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else start = mid + 1; } return -1; }
파라메트릭 서치 (Parametric Search)
- 최적화 문제를 결정문제(Y or N)로 바꾸어 해결하는 기법
- 이진 탐색을 이용하여 해결할 수 있다.
기타 필요한 C++ STL
vector::iterator는 포인터처럼 요소들의 위치와 연관된 동작을 하는 객체
vector<int> v; vector<int>::iterator itr; //itr을 v의 시작위치를 갖게 선언 itr = v.begin();
lower_bound, upper_bound는 vector에서 해당 위치를 리턴한다.
// v = {10 10 10 20 20 20 30 30} low = std::lower_bound (v.begin(), v.end(), 20); // 3 up = std::upper_bound (v.begin(), v.end(), 20); // 6
lower_bound는 x보다 작지 않은 최초의 숫자의 iterator를 반환한다. 예를 들어 lower_bound(13)이면 맨 앞쪽 20 (네 번째 원소)의 iterator가 반환된다.
upper_bound는 x보다 큰 최초의 숫자의 iterator를 반환한다. 예를 들어 upper_bound(13)이면 마찬가지로 맨 앞쪽 20 (네 번째 원소)의 iterator가 반환된다.
참고한 사이트
- 나동빈님 유튜브: 이코테 2021 강의
- 나동빈님 Github: 이코테 소스코드 저장소
'Study note > Coding test' 카테고리의 다른 글
Hash 문법 정리 (C++) (0) | 2024.04.12 |
---|---|
DP - Dynamic Programming (0) | 2024.04.12 |
그래프 탐색 알고리즘: DFS/BFS (0) | 2024.04.12 |
그리디 & 구현 (0) | 2024.04.12 |
코딩 테스트에서 주의할 점 (1) | 2024.04.12 |