본문 바로가기

전체 글50

RAII 패턴과 LockGuard 방식의 스레드 제어 RAII (Resoruce Acquisition is Initialization) 패턴은 자원의 할당과 해제를 자동화해주는 패턴입니다. DB인증, 공유자원 등 여러 방면에서 활용될 수 있으며 코드의 안전성을 보장해줍니다. 스택에 할당된 메모리가 자동으로 해제되며 소멸자가 호출된다는 점을 이용한 패턴이며, 저는 최근 C++의 멀티스레드 프로그래밍을 공부하며 접하게 되었습니다. Thread의 동기화를 제어하는 방식은 Atomic과 Lock등 여러 방법이 있습니다. 다만 Lock의 경우 lock, unlock이 set를 이루어 작동되어야합니다. lock 이후 unlock이 이루어지지 않는 경우 무한한 대기상태에 빠지게 됩니다. 멀티스레드 환경에서는 이러한 문제를 LockGuard를 이용해 unlock을 보장합.. 2021. 10. 27.
[자료형] char 자료형으로 for 반복문을 실행하면 어떻게 될까? 일반적인 for문의 사용은 다음과 같이 int형 변수를 초기화하여 사용한다. int main() { for (int i = 0; i < 250; i++) { cout 2021. 10. 26.
[DP] Longest Increasing Subsequence (LIS) Dynamic Algorithm을 응용하여 풀 수 있는 문제중에 최장 증가 부분수열 문제가 있다. 해당 문제는 주어진 수열에서 가장 긴 부분 수열을 찾는 문제이다. 보통 오름차순,내림차순 등의 조건이 주어지니 Bottom-Up 방식으로 판별해나가면된다. 백준에서 풀이해볼 수 있는 문제는 11053번 문제이다. https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 내가 풀이.. 2021. 10. 24.
Hash Table과 Map은 언제 사용하면 좋을까? Hash Table Map 삽입속도 O(1) O(logN) 삭제속도 O(1) O(logN) 검색속도 O(1) O(logN) Hash와 Map의 핵심적인 차이점은 다음과 같다. 1. Hash table은 멀티스레드에서 동기화를 지원할 수 있다. 2. Map은 항상 정렬된 상태로 데이터가 유지된다. 3. Hash는 Hash Function을 이용해 O(1)의 검색속도를, Map은 O(logN)의 성능을 지닌다. 따라서 데이터의 양이 적을 경우 map보다 Hash Table의 성능이 우수해진다. 기본적으로 RB-Tree 기반으로 구현되어 자체적인 balancing이 가능하기에 성능은 트리의 레벨만에 영향을 받는다. http://veblush.github.io/ko/posts/map-vs-unorderedmap.. 2021. 10. 18.