[알고리즘] KMP 문자열 매칭 알고리즘
길이가 100’000 인 문자열에서 길이가 10 인 특정 문자열을 찾으려면 어떻게 해야 할까요? 이번 포스트에서는 문자열 탐색을 위한 알고리즘은 무엇이 있는지 알아보겠습니다. 하나씩 전부 비교하기 O(M x N) 구현이 가장 간단한 방법은 찾는 문자열을 100’000 자에서 한 글자씩 이동하면서 전부 비교하는 방법 입니다. 100’000 자를...
길이가 100’000 인 문자열에서 길이가 10 인 특정 문자열을 찾으려면 어떻게 해야 할까요? 이번 포스트에서는 문자열 탐색을 위한 알고리즘은 무엇이 있는지 알아보겠습니다. 하나씩 전부 비교하기 O(M x N) 구현이 가장 간단한 방법은 찾는 문자열을 100’000 자에서 한 글자씩 이동하면서 전부 비교하는 방법 입니다. 100’000 자를...
RDBMS의 한 종류인 MySQL 에서 2개 이상의 테이블을 JOIN 하려고 할 때, 몇 가지 규칙이 존재합니다. 이번 포스트에서는 MySQL 에서 사용하는 INNER JOIN 절에 대해 알아보겠습니다. INNER JOIN 절에서 INNER 을 생략하여 JOIN 만 사용할 수 있습니다. 테이블들의 교집합 JOIN 절은 2개 이상의 테이블...
Protoc 는 Protobuf 파일을 입력과 함께 전달받은 명령어로 특정 언어로 컴파일된 파일을 출력합니다. 이번 포스트에서는 Protoc 를 설치하는 방법에 대해서 알아보겠습니다. Protoc 를 설치하는 방법은 vcpkg, github 등 여러가지 방법이 있습니다. vcpkg 를 사용해서 protoc 설치하기 vcpkg searc...
async 한정자 이번 포스트에서는 비동기와 병렬에서 설명한 비동기를 C#에서 직접 사용해 보겠습니다. C# 에서는 비동기 프로그래밍을 위해 async 한정자와 await 키워드가 존재합니다. C# 컴파일러가 async 한정자를 만나면 반환을 기다리지 않고 다음 다음 코드를 실행할 수 있도록 컴파일합니다. async 한정자를 사용하는 메서드는 ...
async 소개 C++에서 스레드를 사용한 작업은 직접 스레드를 생성하고 종료시켰습니다. 하지만 std::async 에 어떤 함수를 전달한다면, 이전 스레드 관리 방법과 다르게 알아서 스레드를 만들어 Thread Pool 로 객체를 관리하고 해당 함수를 비동기적으로 실행한 뒤 결과값을 future 에 전달합니다. async 사용법 void ...
문제의 코드 개인 프로젝트를 간단히 소개하면 통신하는 프로그램은 유저의 최초 접속부터 매치 메이킹까지 진행하는 C# 메인 서버와 게임 스테이지를 전문적으로 관리하는 C++ 스테이지 서버로 이루어져 있고 클라이언트는 PC에서 UE5, 모바일에서 Unity 로 되어있습니다. GitHub Repo 다양한 기술에 도전해보고 싶어 프로젝트에 많은...
아침 식사 만들기 비동기와 병렬 작업은 우리가 생활에서 항상 실행하고 있습니다. 대표적인 예시로 아침 식사 만들기가 있습니다. 비동기 작업 집에서 아침밥을 먹을 때, 메뉴로 밥과 식은 국 그리고 냉장고에 보관된 반찬들이 있습니다. 아침밥을 준비하기 위한 일은 다음과 같고 번호는 작업 순서를 의미하지 않는다고 않습니다. 식탁에 ...
백준 문제 에이티식스에서 제가 선택한 알고리즘은 BFS(너비 우선 탐색) 였습니다. 저거노트를 탄 신에이 노우젠(이하 신)이 전장에서 가능한 모든 레기온을 처치했을 때, 최소 소요시간을 구해야 하기 때문입니다. 그래서 최초의 코드는 다음과 같이 작성했습니다. int BFS() { bool** visited = new bool*[N]; ...
현재 문제점 문제의 코드에서는 패킷을 모두 protobuf가 아니라 구조체로 작성했을 때, 유효했습니다. 그러나 이 프로젝트에서는 Protobuf를 사용한 패킷 통신이기 때문에 문자열을 그대로 해석하면 정상적인 해석이 불가능합니다. void process_packet(int c_id, char* packet) { switch (pack...
자동으로 .join() 해줄 것이라는 착각 RHTF 프로젝트를 진행하면서, Stage Server에서 사용하는 멀티스레드를 기존에 사용해오던 thread class가 아니라, C++20의 jthread를 사용해 보았습니다. jthread는 기존 thread와 달리 join() 함수가 자동으로 처리되는 함수라고 소개되어 있습니다. 자동으로 joi...