Programming/알고리즘
🔹 Functor란 Functor는 함수처럼 동작하는 객체를 의미합니다. C++에서 함수 포인터를 이용해 함수를 전달할 수 있지만, Functor는 함수 포인터보다 유연성이 높고 객체 지향적인 설계를 할 수 있도록 도와줍니다. struct와 class 모두 사용가능하고, 아래 예시에서는 간결함을 위해 struct를 사용했습니다. struct Adder { int operator()(int a, int b) { return a + b; } }; int main() { Adder add; int result = add(3, 4); // result는 7이 됩니다. return 0; } 이런식으로 객체에 함수를 정의하여 사용할 수 있는게 functor의 가장 기본입니다. 🔹 Functor을 사용하는 경우 1...
🔹 Template란 C++에서 템플릿(Template)은 함수나 클래스의 정의에서 데이터 타입에 대한 매개변수화를 허용하는 기능입니다. 즉, 템플릿은 클래스나 함수를 작성할 때, 데이터 타입이나 상수 값을 매개변수로 받아서, 자동으로 여러 개의 타입이나 값에 동작하도록 하는 기능입니다. 템플릿을 사용하면, 코드의 재사용성과 유지보수성이 향상됩니다. 또한, 템플릿을 사용하여 제네릭(Generic) 프로그래밍을 할 수 있으며, 이는 STL(Standard Template Library)에서 매우 널리 사용됩니다. 🔹 Template 사용 예시 아래와 같이 Template를 정의하겠습니다. template void print(T arg) { std::cout
🔹 요약 C++에서 struct와 class는 모두 사용자 데이터 타입을 정의할 때 사용됩니다. 둘 다 데이터 멤버와 함수를 가질 수 있습니다. 그러나 일반적으로 struct는 데이터의 집합체로 사용되며, class는 객체 지향 프로그래밍에서 객체의 정의를 위해 사용됩니다. struct와 class의 주요 차이점은 기본 접근 제어 수준입니다. struct는 기본적으로 public으로 정의되며, class는 기본적으로 private으로 정의됩니다. 이것은 struct는 멤버 변수 및 함수가 외부에서 쉽게 액세스 될 수 있지만, class는 멤버 변수 및 함수에 대한 직접적인 액세스를 제한합니다. 또한, class는 상속, 다형성 및 캡슐화와 같은 객체 지향 개념을 더 잘 지원합니다. 이러한 이유로, 클래스..
🔹 요약 알고리즘 평균 수행시간 최악 수행시간 특징 버블 정렬 O(N^2) O(N^2) 이해가 쉽다. (코딩이 쉽다) 카운팅 정렬 O(N+K) O(N+K) 비교적 빠르다. 선택 정렬 O(N^2) O(N^2) 수행 회수가 버블&삽입 정렬보다 작다. 🔹 버블 정렬 (Bubble Sort) 인접한 두 개의 원소를 비교하며 자리를 계속 교환하는 방식 정렬 과정 모든 원소를 이동하며 인접한 원소끼리 크기를 비교하여 자리를 교환한다. 한번 전체를 이동하면 가장 큰 원소가 마지막에 위치한다. 다시 처음부터 마지막 전까지 정렬한다. 시간 복잡도: O(N^2) 파이썬 코드 def bubble_sort(arr): for end_idx in range(len(arr)-1, 0, -1): # 마지막 지점이다. for move..
알고리즘 성능 측정 무엇이 좋은 알고리즘일까? 정확성, 작업량, 메모리, 가시성, 확장성 ... 등등 모두 중요하지만, 실제 상황에 따라 우선 순위가 적용될 것이다. 정성적으로 판단하는 것들을 제외하고, 정량적으로 판단하기 위한 기준이 필요해 보인다. 특히, 코딩테스트와 같은 메모리와 수행 시간이 정해진 문제를 풀때 유용한 판단 방식에 집중한다. 시간복잡도 알고리즘 작업량(수행 시간)을 예상할 때 사용한다. 코딩테스트에서 테스트 케이스가 전부 공개되지 않기때문에 직접 돌려가면서 확인할 수 없다. 따라서 시간복잡도를 계산하여 작업 시간을 추측한다. 우선은 시간복잡도는 수행되는 명령문의 수라고 생각하자. 예를들면, 100이하의 모르는 수를 찾아간다. 그 수는 75라고 하자. [1경우] 1->2->3->4 이..