1. 싱클톤(singletion) 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통 데이터베이스 연결 모듈에 많이 사용된다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할때 드는 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는 단점이 있다. 프로그램을 구현할 때 클래스의 인스턴스가 단 하나만 존재하게 만들려면 싱글턴 패턴을 적용하면 된다. 싱글턴 패턴은 유틸리티 클래스 구현에 적합하다. 많은 어플리케이션에서는 상태 정보, 디버깅 데이터, 특정한 지점에서 발생한 에러를 기록하는 클래스인 로거(logger)를 사용하는 경우가 많다. 로거 클래스는 싱글턴으로 구현하는 것이 좋다. 구현 방법: (1). static 메서드만 가지..
1. 전처리 지시자 C++로 작성된 소스 코드를 프로그램으로 만드는 빌드(build)작업은 세 단계를 거치며, 전처리 지시자(directive)는 전처리기에 전달할 사항을 표현하며, '#' 문자로 시작한다. 빌드 작업: 전처리(Preprocess) -> 컴파일(complie) -> 링크(link) 2. main ( ) 함수 main 함수는 매개변수를 받지 않거나, 두 매개변수를 받도록 작성할 수 있다. int main (int argc, char* argv[]) - argc: 프로그램에 전달할 인수 개수 - argv[]: 전달할 인수의 값을 담는 배열 - argv[0]에는 프로그램 이름이 담김. * 주의: 실제 매개변수는 인덱스 1부터 시작한다. 3. (C++17) std::byte c++17 이전에는 ..
우리가 흔히 말하는 프로그램이란 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 상태이며 컴퓨터에서 실행되는 명령어 모음이 들어 있는 데이터 덩어리를 의미한다. 그것을 더블클릭하여 실행시키기 전까지는 프로그램 자체로는 아무런 의미가 없다. 프로그램을 실행하면 프로그램 안에 들어 있는 명령어가 한 줄씩 실행되면서 프로그램은 뭔가 활동을 하는 상태가 된다. 이를 프로세스라고 한다. Q. 프로세스와 스레드에 대해서 설명해주세요. 1. 프로세스(Process) - 운영체제로부터 자원(프로세서, 필요한 주소 공간, 메모리 등)을 할당받는 작업의 단위이자 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. - 프로그램이 메모..
11066번: 파일 합치기 (acmicpc.net) 11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본 www.acmicpc.net 너무 어려웠던 .. 파일 합치기 .. 많은 블로거들이 포스팅한 글을 봐도 이해가 거의 안갔다 @_@.. ㅋㅋㅋ 억지로 외우고 따라 써보고 코드 그대로 그림을 그려보니 이해가 갔던 문제 였습니다.. 다시 보고 또 다시 봐야 할 거 같습니다. for(int idx = 1; idx < K ; ++idx) { for(int x = 1; x + idx testcase; while(testcase--) { int ..
16139번: 인간-컴퓨터 상호작용 (acmicpc.net) 16139번: 인간-컴퓨터 상호작용 첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째 www.acmicpc.net * 이 전의 누적합으로 사용했던 배열 SumArr[MAX]를 알바벳 개수 만큼 증가 시킴. -> SumArr[26][MAX] #include #include #include #include using namespace std; #define MAX 200'001 int SumArr[26][MAX]; // 구간 합. int main(void) { ios_b..
2559번: 수열 (acmicpc.net) 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 누적 합 * 가장 큰 값만 찾기 때문에 priority_queue 사용함.(기본 정렬 = less) * S값보다 크거나 같을 때부터 누적 합을 해주어 queue에 넣어줌. #include #include #include #include using namespace std; #define MAX 100'001 int SumArr[MAX], Arr[MAX]; // 구간 합. int main(void) { ios..
10986번: 나머지 합 (acmicpc.net) 10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net ※틀린 답: 시간초과 (N^2) 왜 틀렸는지.. 그럼 어떻게 풀어야하는지.. 질문검색을 뒤져보는 중에.. 무슨 말이지??? .. 그래서 예제를 이용해서 천천히 정리해보았다. 1. 부분합을 M으로 나눈 나머지가 같은 것끼리 그룹을 짓는다고 생각해봅시다. SumArr[i] = (Arr[i] + SumArr[i-1]) % M; 범위 (1,1) (1,2) (1,3) (1,4..
11660번: 구간 합 구하기 5 (acmicpc.net) 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 다이나믹 프로그래밍 1. "11659 - 구간 합 구하기4"를 2차원으로 변형한 문제라고 접근했다. 2. 동일한 크기의 행렬을 하나 더 만들어 입력을 받는 동시에 이전의 합과 현재값을 더하여 index 1 ~ index 현재까지의 합을 구해주었다. 3. begin : (x1, y1) end: (x2, y2) 로 구분하여 end부터 begin까지의 합을 구해주었다...
스터디에서 A* 알고리즘을 한 번 작성해보고 간단하게 콘솔로 띄어보고.. 유니티로 적용해보기로 하였다. 유니티로 옮기는 작업 벌써부터 걱정이 된다. 일단 A*알고리즘이 뭔지 정리를 해보자 ..A* 알고리즘은 다익스트라 알고리즘을 확장하여 만들어진 알고리즘으로 주어진 출발 꼭짓점에서부터 목표 꼭짓점까지 가는 최단경로를 찾아내는 그래프 탐색 알고리즘 중 하나이다. 주로 게임에서 몬스터가 플레이어를 목표지점으로 이동하거나 자동 사냥 게임에서 플레이어가 타겟(몬스터나 다른 PC)을 향해 이동시킬 때 사용하는 알고리즘이다. 알고리즘다익스트라 알고리즘 A* 알고리즘목표점시작점 -> 나머지 모든 정점들까지의 최단 거리시작점 -> 목표점까지의 최단 거리 차후 경로 도출을 위한 함수f(n)현재 노드에서 가까운 노드부터..
https://www.acmicpc.net/problem/24480 24480번: 알고리즘 수업 - 깊이 우선 탐색 2 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양 www.acmicpc.net 인접리스트, DFS * 주의 1. 문제에서 나온 알고리즘을 따라서 만들면 되지만 인접행렬로 코드를 짜게 되면 시간초과로 통과 할 수없었다. 인접 리스트로 코드를 작성해야 한다. 2. 무방향 그래프 이므로 양쪽으로 연결해줘야 한다. 3. 내림차순으로 정렬해줘야 한다. sort는 less가 default이기 때문에 greater..