분류 전체보기 78

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..

면접 대비 C++ 기초

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! 1. Pointer와 reference의 차이점 Pointer는 값을 바꿀 수 있지만 reference는 바꿀 수 없다. 그래서 pointer는 값을 increment/decrement할 수 있다. reference는 NULL을 참조할 수 없다. 2. 람다 (Lambda) Modern C++ 문법 [captures](parameters) -> return type {body} lambda를 function에 대입 가능 lambda를 ..

Study note/CS 2024.04.12

코딩 테스트에서 자주 쓰이는 기본 문법들

기술면접을 위해 기초 CS에 대한 복습중이다. 공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다. 내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의! String 사용법 String 크기: s.length(); 혹은 s.size() String의 첫 문자: s.front(); String의 끝 문자: s.back(); String 찾기: s.find("aroma");라고 하면 aroma라는 단어가 나오기 시작하는 곳의 index를 반환 String 맨 뒤에 문자 추가하기: void push_back(char a); String 맨 뒤에 문자 삭제하기: s.pop_back(); St..