Study note/Coding test 11

순열 - 재귀함수 (C++)

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 재귀함수로 구현 #include #include #include using namespace std; /* 순열 알고리즘 */ void Permutation(vector& Array, int Start, int End) { // 시작과 끝이 같으면 모든 인덱스 순환했다는 뜻 if (Start == End) { for (const auto it : Array) { cout

Hash 문법 정리 (C++)

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! Hash 기본 문법 #include // 선언. string과 int 이런 식으로 pair로 선언함 unordered_map hash; // hash에 값 할당 // s를 돌면서 s의 i가 가리키는 값을 hash의 key로 vector s; for (auto& i : s) { hash[i]++; } // 만약 "aroma"라는 key에 해당 value가 100이라면 // 아래는 100을 출력하게 된다. cout

DP - Dynamic Programming

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 다이나믹 프로그래밍 피보나치 수열처럼 점화식 풀 때 사용한다. 이미 계산한 것은 다시 계산을 하지 않게끔 하는 것이 목적이다. 탑다운과 보텀업 방식이 있다. 보텀업: DP 테이블을 만들어서 하는 방식. // 첫 번째 피보나치 수와 두 번째 피보나치 수는 1 d[1] = 1; d[2] = 1; int n = 50; // 50번째 피보나치 수를 계산 // 피보나치 함수(Fibonacci Function) 반복문으로 구현 for (int ..

Binary Search

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 이진탐색 정렬되어 있는 리스트에서 절반씩 좁혀가며 탐색한다. 시작점, 끝점, 중간점을 이용한다. 시간 복잡도: $O(logN)$// 이진 탐색 소스코드 구현(반복문) int binarySearch(vector& arr, int target, int start, int end) { while (start target) end = mid - 1; // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else star..

그래프 탐색 알고리즘: DFS/BFS

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! Stack in C++ stack s; // 선언 s.push(5); // 5를 push s.top(); // 최상단 원소 s.pop(); // 5를 pop Queue in C++ queue q; // 선언 q.push(5); // 5를 push q.front(); // 가장 먼저 들어온 원소 q.pop(); // 5를 pop 재귀함수 (Recursive) stack처럼 가장 나중에 호출된 recursive 함수가 가장 먼저 종료된다..

그리디 & 구현

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 그리디 알고리즘(Greedy) 현재 상황에서 지금 당장 좋은 것만 고르는 방법 정당성 분석이 중요! 예를 들어, 동전 거스름돈 문제처럼 큰 단위가 항상 작은 단위의 배수일 경우 적합하다. 모든 케이스를 볼 필요 없을 때 정해진 이전 것이 다음에 영향을 미치지 않을 때 현재 조건에서 현재 값이 최적 해일 때 구현(Implementation) 구현 유형 == 시뮬레이션 유형 == 완전 탐색 유형 2차원 공간은 행렬(Matrix)를 의미한..

코딩 테스트에서 주의할 점

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 테스트 케이스 바운더리, 0, 음수 이런 걸 고려해서 넣어보자. 가장 큰 수, 작은 수 등 음수만 있는 경우, 양수만 있는 경우, 섞여 있는 경우 등 고려하기. 두 가지 이상이 섞여있는 경우, A케이스만 있는 경우, B케이스만 있는 경우, 둘 다 섞여 있는 경우로 나눠서 고려하기. 런타임 에러 오버플로우 주의하기. 바운더리 값끼리 더한다든지, 뺀다든지 해서 바운더리를 넘어가지 않도록 구현해야한다. 없는데 접근 No Stack, vec..

정렬 알고리즘(Sort)

기술면접을 위해 기초 CS에 대한 복습중이다. 그 중 오늘은 정렬 알고리즘, Sorting에 관한 알고리즘에 대해 공부하고, 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 버블 정렬(Bubble Sort) 시간 복잡도: 정렬이 되어있든 아니든 $O(n^{2})$이다. 공간 복잡도: 주어진 배열 안에서 swap만 하기 때문에 $O(n)$이다. 선택 정렬(Selection Sort) 기본 알고리즘 처리되지 않은 데이터를 linear search로 가장 작은 숫자를 찾는다. 그 처리되지 않은 데이터 중 가장 앞쪽에 있는 숫자와 s..

Vector 문법 정리 (C++)

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! Vector 기본 문법 // 크기는 3, 모든 값은 10000으로 초기화 vector v(3, 10000); // index 2에 10을 추가 v.insert(v.begin() + 2, 10); // 거꾸로 뒤집기 reverse(v.begin(), v.end()); 값 출력 방법 // 방법1: 배열처럼 접근해서 loop로 출력 for (int i = 0 ; i < vec.size(); i++) cout

Heap & priority_queue

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! Heap의 특징 최대/최소 원소를 빠르게 찾을 수 있다. Maxheap, Minheap이 있다. (큰 값이 맨 앞, 작은 값이 맨 앞) 연산 힙 구성 (Heapify): $O(NlogN)$ (N개를 insert하므로) 삽입 (Insert): $O(logN)$ (바이너리 트리 형태이므로) 삭제 (Remove): $O(logN)$ (바이너리 트리 형태이므로) 완전 이진트리라서 배열로 접근 가능 (메모리 효율이 높다) 응용 정렬: heap..