본문 바로가기

컴퓨터/C, C++38

[C/C++] 문자열 검색 알고리즘 카프-라빈 파일을 참조하는 프로그램을 만들다 보면 문자열 분리나 검색의 필요성을 느낄 때가 많습니다. 카프-라빈 알고리즘이나 보이어-무어 알고리즘 같이 특히 유용한 기법들을 공부하고 있는데, 제법 어렵더군요. 이번 글에선 복습 겸 카프-라빈 알고리즘에 대해 정리해봤습니다. KarpRabin // CP_ACP(ANSI) #include #include #include #define MAX_BUFFER 500 int KarpRabin(char* Buffer, char* Pattern){ int i,j; int PatternSize = _tcslen(Pattern); int BufferSize = _tcslen(Buffer); int StartingHash = 0; int OriginHash = 0; int Patter.. 2022. 11. 24.
[C/C++] HANDLE 자료형에 대한 캐스팅 연산 가끔 실습을 하다 보면 여러 가지 문제로 프로그램이 실행되지 않거나 컴파일되지 않는 상황이 발생합니다. 또는, 올바르지 않은 캐스팅 연산으로 데이터가 읽히지 않는 경우도 있죠. 작성자와 같이 독학하는 경우 이런 문제에 대한 해결 방법을 찾으려면 시간이 꽤나 소요됩니다. 해서 공부하면서 막혔던 부분을 몇 가지 기록해두려 합니다. 일단, 제목에 나온 HANDLE 타입이 무엇인지 먼저 보겠습니다. typedef PVOID HANDLE; typedef void *PVOID; HANDLE 자료형은 위에 나와있듯 그냥 void*형과 같습니다. 다음은 이 HANDLE 자료형을 리턴하는 함수에 대해 알아보겠습니다. HANDLE GetPropW( [in] HWND hWnd, [in] LPCWSTR lpString ); .. 2022. 10. 28.
[C/C++] CreateFileMapping Function, Read a Unicode file. API를 다루다 보면 UTF-16과 UTF-8, ANSI로 작성된 파일 및 문서를 실행 중에 읽어 들여야 하는 경우가 있습니다. 이때 BOM(Byte Order Mark)을 이용해 파일을 쓰거나 변환 함수를 사용해 파일을 읽어 들입니다. 제목에 나와있는 CreateFileMapping이라는 API 함수는 하드디스크에 존재하는 파일을 프로세스의 가상 메모리 공간에 연결하여 메모리처럼 읽고 쓸 수 있습니다. 흔히 사용되는 IPC 기법 중 하나인데, 포인터만으로도 파일의 내용을 바꾸거나 읽어올 수 있다는 특징을 갖고 있죠. 자세한 내용은 레퍼런스를 참고하시면 좋을 것 같습니다. 여기선 간단히 소개만 하고 일단 이 함수를 통해 UTF-8 또는 ANSI 로 작성된 파일을 Unicode(WideChar)로 변환하여.. 2022. 10. 27.
[C/C++] 백준 1260번 C언어 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. .. 2022. 9. 9.
[C/C++] 백준 7568번 C언어 백준 7568번 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"라고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치.. 2022. 6. 14.
[C/C++] 백준 2231번 C언어 백준 2231번 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자릿수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. #include int temp=0; int NumLength(int N){ in.. 2022. 6. 14.
반응형