CS (29) 썸네일형 리스트형 [Design Pattern] 싱글톤 (Singleton) 패턴이란? 1. 싱글톤 패턴이란?싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 생성 패턴이다. 애플리케이션 전역에서 동일한 인스턴스를 공유해야 할 때 사용하며, 설정 관리자, 로거, 커넥션 풀 같은 경우가 대표적인 예시이다. 싱글톤 패턴의 핵심 요소private 생성자: 외부에서 직접 인스턴스를 생성하지 못하도록 막는다.private static 인스턴스 변수: 클래스 내부에서 유일한 인스턴스를 보관한다.public static 접근 메서드: 외부에서 인스턴스에 접근할 수 있는 전역 접근점을 제공한다. 2. 싱글톤 패턴 구현 방식싱글톤 패턴은 여러 방식으로 구현할 수 있으며, 각 방식마다 장단점과 적용 시나리오가 다르다. 2.1 Lazy Initialization (지연 초기화)가장 기.. [Design Pattern] 전략 (Strategy) 패턴이란? 전략 패턴?실행 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행동 패턴 핵심 아이디어 동일한 문제를 해결하는 여러 알고리즘이 있을 때, 각 알고리즘을 별도의 클래스로 캡슐화런타임에 알고리즘을 선택하여 교체 가능조건문(if-else, switch) 대신 객체 위임을 통한 알고리즘 선택 구조 실무 예제: Java Comparatorpublic class ComparatorExample { public static void main(String[] args) { List names = Arrays.asList("John", "Alice", "Bob", "Charlie"); // 전략 1: 알파벳 순 정렬 C.. [AI] AI를 위한 선형대수학 기초 이 포스트는 숭실대학교 김창훈 교수님의 인공지능 수업을 정리한 포스트입니다. SVD 간단 소개다음과 같은 행렬 A가 있을 때, 이 행렬 A의 Column Space는 아래와 같다.그러므로 이 행렬 A의 Rank는 1이다. 이를 SVD로 간단하게 표현해보면 아래와 같이 표현해볼 수 있다.3*1 과 1*3의 행렬로 분해되었다. CR 분해 간단 소개다음과 같은 행렬 A가 있을 때, 이 행렬의 Column Space는 아래와 같다.그러므로 이 행렬 A의 Rank는 2이다. 이를 CR 분해시키면 아래와 같이 결과가 나온다. Rank와 Column space행렬 A가 있을 때, Rank(A) = Rank(A^T)는 성립한다.이는 전치를 시켜도 선형 독립 관계가 유지되기 때문이다! 그리고 Ax의 Column s.. [C++] 유클리드 호제법 - 최대공약수와 최소공배수 구하기 정의- 유클리드 호제법 또는 유클리드 알고리즘은 2개의 자연수 또는 정식의최대공약수를 구하는 알고리즘의 하나이다. - 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다. - 2개의 자연수 a, b에 대하여 a를 b로 나눈 나머지를 r이라 하면 (단, a > b),a와 b의 최대공약수는 b와 r의 최대공약수와 같다.- 위의 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여나머지가 0이 되었을 때 나누는 수가 a와 b의 최대 공약수이다. ※ 출처: 위키백과/유클리드 호제법 예제(간단)- 60과 42의 최대 공약수를 구해보자. 1. GCD(60, 42)60 % 42 = 18 2. GCD(42, 18)42.. [C++] 매개변수 탐색 매개변수 탐색? - 이분 탐색(Binary search)와 상당히 유사한 알고리즘 - Nimrod Megido에 의해 발명되었으며, 최적화 문제를 "결정 문제"로 풀 수 있는 알고리즘 - 시간 복잡도(Time complexity): O(log N) 최적화 문제: 어떠한 함수값을 최적화 시키는 변수를 찾는 문제 결정 문제: 예-아니오의 형태로 답안이 나오는 문제 알고리즘 동작 방식 1. 특정 변수 값(mid)을 토대로 조건을 만족하는지 안하는지 탐색한다. ※ 이때, 구현은 이분 탐색으로 구현한다. 2. 이 탐색 과정에서 우리는 두 가지를 알 수 있다. - 조건을 만족하는 가? -> 결정문제 - 나머지 범위가 조건을 만족하는 가? -> 이분 탐색 3. 조건을 만족하는 범위를 계속 좁혀가며(start와 end.. [C++] 소수 판정(에라토스테네스의 체) 숫자들 중 소수인 것들을 어떻게 구분할 수 있을까? 0. 충분히 큰 수를 최댓값으로 설정한다. 1. int형 배열을 하나 만든 뒤, 각 값들을 각 인덱스로 초기화한다. 2. 소수인 2부터 시작해서 배수들을 모두 0으로 초기화한다. ※이때, 소수들은 초기화해선 안되므로 bool형 변수를 활용한다. 3. 배열에 0이 아닌 숫자들이 들어있는 숫자들은 모두 소수이다! #include #define MAX 1000000 using namespace std; int num[MAX]; int main(){ for(int i = 2; i [C++] 벨만-포드 알고리즘 핵심 요약 한 정점에서 다른 모든 정점으로 가는데 걸리는 최소비용을 구하는데 사용하는 알고리즘 음의 가중치가 있을 때 사용 → 음의 사이클을 찾음 동작 원리 모든 간선들을 탐색하면서, 간선이 잇는 출발정점이 '한번이라도 계산 된 정점' 이라면 해당 간선이 잇는 정점의 거리를 비교해서 업데이트 한다. ⇒ 방향성이 있기 때문! 1번 과정을 반복한다. (N-1번) 음의 사이클을 찾는 방법 N-1번 반복 후, 1번 더 반복한다. → "정상적인 그래프라면, 즉, 음의 사이클이 발생하지 않는 그래프라면, N - 1번을 탐색한 이후에, 또 한번의 탐색을 더 하더라도 절대로! 최소비용이 변하는 정점이 발생하지 않는다" [C++] 다익스트라(Dijkstra) 핵심 요약최단 경로 탐색 알고리즘.방문한 노드들과 연결된 간선 중 최소 비용인 간선을 선택하는 알고리즘.단, 가중치가 양수일때만 적용할 수 있다. 동작 원리'비용' 이라는 말을 많이 사용하게 될 텐데, 이 값은 1차원 배열 Dist[] 라는 배열에 저장되어 있다고 생각하자. 초기 Dist배열의 모든 값은 무한대(INF)로 초기화 되어 있다.시작 노드와 직접적으로 연결된 모든 정점들의 거리를 비교해서 업데이트 시켜주고, 시작 노드를 방문한 노드로 체크한다.방문한 정점들과 연결되어 있는 정점들 중, 비용이 가장 적게 드는 정점을 선택하고, 해당 정점을 방문한 정점으로 체크해준다.2번 과정에 의해서 갱신될 수 있는 정점들의 거리를 갱신시켜준다.3 ~ 4번 과정을 반복한다. 구현1. 비용을 저장할 int형 배열.. 이전 1 2 3 4 다음