분류 전체보기 268

[C++] 난수 생성

랜덤 함수 개요 컴퓨터는 명령어와 알고리즘을 기반으로 동작하는 결정론적인 기계다. 이런 특성 때문에, 컴퓨터는 완전히 무작위적인 값을 자체적으로 생성하는 것이 기본적으로 어렵다. 그렇지만, 멀티코어 컴퓨터의 경우 각 코어 간의 타이밍 차이나 상호 작용으로 인한 비결정성을 활용하여 어느 정도의 무작위성을 가진 값을 생성할 수 있다. 그렇지만 이렇게 생성된 값은 완전한 엔트로피를 기반으로 하는 '진정한' 난수에 비해 일정한 제한이 있을 수 있다. C++에서는 여러 방법으로 이러한 무작위 값을 생성할 수 있다. 대표적인 방법으로는 C-style의 rand() 함수, C++11 이후에 도입된 라이브러리, 그리고 하드웨어 기반의 난수 생성기를 사용하는 std::random_device 클래스 등이 있다. 이 글에..

Language/C++ 2023.09.04

[C++] JSON 파일 읽기 with nlohmann

JSON 파일 읽기 개요 JSON(JavaScript Object Notation) 파일은 키와 값의 쌍으로 이루어진 파일이다. 이는 데이터베이스에서 데이터를 저장하고, 데이터를 주고받을 때 자주 사용되는 형식이다. 클라이언트가 사용하는 언어에 관계없이 통일된 데이터를 주고받을 수 있게 해 준다. 일반적인 JSON 파일의 구조는 다음과 같다. { "이름": "홍길동", "나이": 25, "주소": { "도시": "서울", "우편번호": "12345" }, "취미": ["독서", "여행", "요리"], "기혼": false } 위의 예시에서 이름, 나이, 주소, 취미, 기혼은 key고, 홍길동, 25, 도시, 우편번호, 독서, 여행, 요리, false는 각각의 값이다. 이때 값으로 객체와 배열을 포함할 수..

Language/C++ 2023.08.30

[Dictionary] 영어 단어 시험지 ver 1.0 with Notion

영어 단어 테스트 프로그램 개요 개발자들은 영어로 된 자료를 접할 일이 많다. 이는 프로그래밍의 역사가 미국에서 시작되었기 때문이고, 영어가 국제적인 커뮤니케이션 언어로 널리 사용되기 때문이다. 이런 배경 하에 필자는 영어로 된 기술 자료를 읽을 때마다 알게 된 새로운 단어나 표현들을 Notion에 기록해왔다. 그러나, 그저 단어를 기록하는 것만으로는 기억에 오래 남기에는 부족하다고 느껴졌다. 이 단어들을 효과적으로 외우고 활용하기 위해서는 반복적인 연습이 필요하다. 이런 고민에서 출발하여, 필자는 이 단어들을 테스트할 수 있는 간단한 프로그램을 개발하게 되었다. 본문 기본 아이디어 API 호출 → 단어 저장 → 단어 시험 → 결과 출력 노션은 사용자가 직접 데이터베이스를 구축할 수 있는 기능을 제공하며..

Program/Dictionary 2023.08.29

[C++] 문자열 처리 - 연속된 문자열과 동일한 문자열 (2)

동일한 문자열 동일한 문자열은 특정 문자나 문자열 패턴이 반복되는 것을 의미한다. 이를 식별하는 함수를 문자열 순회를 이용하는 방법, regex 라이브러리를 이용하는 방법을 통해 구현해 보자. 문자열 순회 #include #include bool IsRepeated(const std::string& str) { for (int i = 1; i < str.length(); ++i) { if (str[i] == str[i + 1]) return true; } return false; } int main() { std::string str; std::getline(std::cin, str); if (IsRepeated(str)) std::cout

Language/C++ 2023.08.26

[C++] 문자열 처리 - 연속된 문자열과 동일한 문자열 (1)

문자열 처리 개요 연속된 문자열과 동일한 문자열을 처리하는 것은 다양한 문제 해결에 필수적인 요소 중 하나다. 문자열 내에서 동일하거나 연속적인 문자나 패턴을 식별하고 처리하는 능력은 데이터 압축, 정보 검색, 보안 강화 등 여러 분야에서 중요한 역할을 한다. 특히, 연속된 문자열은 예측이 쉬우므로 보안 문제에서 취약점으로 작용할 수 있으며, 반면에 동일한 문자열은 데이터의 중복을 나타내므로 압축 알고리즘에서 핵심 요소로 작용한다. 이러한 문자열 처리 기법은 컴퓨터 과학과 프로그래밍의 여러 분야에서 활용되며, 효율적인 알고리즘과 메서드를 통해 더 나은 성능과 결과를 얻을 수 있다. 이번 시간에는 이러한 문자열을 처리하는 방법에 대해 알아보도록 하자. 본문 연속된 문자열 연속된 문자열은 abc, 123처럼..

Language/C++ 2023.08.25

[프로그래머스] 신규 아이디 with C++

문제 설명 제한 사항 및 입출력 예제 개념 주어진 문자열에 대해서, 문제에서 제시한 7단계의 규칙을 순차적으로 적용하여 새로운 문자열을 생성하는 문제다. 각 단게는 특정 문자열 패턴의 변환 및 제거를 포함하며, 모든 단계를 차례대로 완료하면 최종적으로 원하는 문자열 형태를 얻을 수 있다. 풀이 #include #include #include using namespace std; string solution(string new_id) { string answer = ""; // 1단계 transform(new_id.begin(), new_id.end(), new_id.begin(), static_cast(std::tolower)); // 2단계 new_id.erase(remove_if(new_id.begi..

[C++] 싱글톤 패턴의 메모리 할당과 해제 with C++

할당과 해제 개요 앞서 설명한 내용들을 토대로 싱글톤 패턴으로 디자인된 클래스에서 소멸자에 메모리를 해제하는 코드를 추가하는 것은 주의해야 한다는 점을 알았다. 따라서 new 키워드로 호출된 인스턴스를 할당 해제 하는 방법들에 대해 알아보자. 본문 싱글톤으로 디자인된 클래스의 인스턴스 메모리를 해제하려면 다음과 같은 방법을 사용할 수 있다. 정적 메서드 추가 인스턴스를 불러오는 공개된 정적 멤버 함수처럼, 인스턴스의 메모리를 해제하는 정적 메서드를 추가하면 된다. 이를 테면, #include class singleton { static singleton* _instance; singleton(); ~singleton(); singleton(const singleton&) = delete; singleto..

카테고리 없음 2023.08.17

[MySQL] 데이터 백업과 수정 with C++

MySQL 테이블 데이터 백업과 수정 개요 리그 오브 레전드를 주제로 한 토이 프로젝트를 진행 중에, 새로운 시즌이 시작됨에 따라 플래티넘과 다이아몬드 티어 사이에 새롭게 에메랄드 티어가 도입되었다. 내 데이터베이스 테이블은 사용자의 닉네임, 티어, 라인, 점수로 구성되어 있으며, 사용자의 티어에 따라 자동으로 점수가 매핑되도록 설정되어 있다. 즉, 티어와 점수가 직접 연결되어 있기 때문에, 이러한 게임 내 변화는 데이터베이스의 일관성을 유지하기 위한 추가 조치가 필요하다는 것을 알았다. 이번 시간에는 기존의 테이블에 존재하는 데이터를 수정하는 방법과, 그전에 데이터를 백업하는 방법에 대해 알아보도록 하자. 본문 데이터 백업 데이터를 수정하기 전에 백업을 하자. 필자는 WorkBench 8.0을 쓰고 있..

[Git] gitignore, gitattribute

리포지토리 내의 파일 및 디렉터리 동작 정의 개요 개발 환경에선 다양한 디렉터리 구조를 관리하는 필요성이 자주 생긴다. 필자는 깃허브 업로드를 위한 _Git 폴더와 개발자 전용의 _Dev 폴더를 분리하여 사용했다. 이 두 폴더를 별도로 관리하다 보니 문제점이 발생했다. _Dev 폴더는 개발 과정에서 생성되는 모든 파일, 예를 들면 .dll 파일이나 로컬 테스트를 위한 설정 파일 등을 포함하고 있다. 반면, _Git 폴더는 깃허브 업로드를 위해서만 필요한 소스 코드와 프로젝트 파일로 구성되어 있다. 이 때문에 원격 저장소에 올릴 때마다, _Dev의 변경 사항을 _Git로 옮기고 불필요한 파일을 일일이 제거하는 과정이 필요했다. Git에서는 이러한 문제를 해결 하기 위한 기능으로 gitattributes와 ..

Version/Git 2023.08.15

[C++] 싱글톤 패턴의 생성자와 소멸자 동작 이해 - new, delete키워드 with C++

new 키워드의 이해 지난 게시글에서는 static 키워드에 대해 알아보았었다. 이번 시간에는 싱글톤 패턴으로 디자인되었을 때 소멸자가 호출되지 않는 이유를 new 키워드에 초점을 맞춰 설명해 보도록 하겠다. C++ Reference에서는 new로 생성된 오브젝트가 그것이 생성된 범위에서 해제되지 않는 동적 메모리 할당을 위해 사용된다고 설명하고 있다. 즉, 프로그램 실행 중에 할당되며, 그 크기나 수명이 컴파일 시점에서 결정되지 않고, 필요에 따라 할당되거나 해제될 수 있다는 것을 의미한다. new 키워드를 사용할 때 몇 가지 주의사항이 있다. 이를 꼭 체크하고 사용하는 습관을 기르자. 메모리 누수: new로 동적 메모리를 할당하면, 반드시 delete를 사용하여 할당된 메모리를 반환해야 함. 그렇지 ..

Language/C++ 2023.08.13