Programming/C++ 11

C++로 익히는 DFS (깊이 우선 탐색)

개요깊이 우선 탐색(Depth-First Search, DFS)은 그래프 또는 트리 구조에서 모든 노드를 방문하기 위한 대표적인 알고리즘이다. 이 알고리즘은 가능한 한 깊이 탐색을 진행한 후, 더 이상 탐색할 수 없을 때 백트래킹하여 다른 경로를 탐색한다. 본 글에서는 C++ 언어를 사용하여 DFS 알고리즘의 개념과 구현 방법을 설명한다.설명DFS는 스택(Stack) 자료구조 또는 재귀 호출을 사용하여 구현할 수 있다. 알고리즘의 기본 로직은 다음과 같다:시작 노드를 선택하고 방문 표시현재 노드와 인접한 미방문 노드가 있으면 해당 노드로 이동하고 방문 표시인접한 미방문 노드가 없으면 이전 노드로 백트래킹모든 노드를 방문할 때까지 2-3단계 반복DFS는 경로 탐색, 위상 정렬, 사이클 감지, 연결 요소 찾..

Programming/C++ 2025.04.07

C++ 콘솔 프로그램에서 ’*’의 이동 효과 구현하기

개요C++ 언어를 사용하여 콘솔 화면에서 별표(’*’)를 위에서 아래로 이동시키는 프로그램을 작성한다. 이 프로그램은 일정 시간 간격으로 화면을 지우고, 별의 위치를 한 칸씩 아래로 이동하는 방식으로 동작한다. 이를 통해 시간 제어 및 콘솔 입출력 기능의 기본적인 활용 방법을 학습할 수 있다.원리본 프로그램의 핵심 동작은 다음과 같이 구성된다.화면 출력 및 지우기: 화면에 출력된 기존 문자를 지우기 위해 윈도우 환경에서는 system("cls")를, 리눅스/유닉스 환경에서는 ANSI escape 코드를 사용한다.시간 제어: 별이 일정 시간(1초) 간격으로 한 줄씩 아래로 이동하도록 std::this_thread::sleep_for 함수를 활용한다.반복을 통한 위치 이동: 반복문(for)을 사용하여 별이 ..

Programming/C++ 2025.03.31

string::compare의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공하며, 그중 string::compare() 함수는 두 문자열을 비교하는 데 사용된다. 이 함수는 문자열 간의 사전적 순서를 판단할 수 있게 해 주며, 문자열 비교 작업에서 매우 유용하다.설명string::compare() 함수는 다음과 같은 형식을 가진다:이 함수는 대소문자를 구분하며, 비교할 문자열의 길이를 넘어서는 경우에는 std::string::npos를 사용하여 기본값을 설정할 수 있다.int compare(const string& str) const noexcept;int compare(size_t pos1, size_t len1, const string& str) const;int compare(size_t ..

Programming/C++ 2025.02.12

std::find 함수의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공한다. 그중 string::find() 함수는 특정 문자열이나 문자를 검색하는 데 사용된다. 이 함수는 문자열 내에서 지정된 부분 문자열이 처음으로 나타나는 위치를 반환하며, 검색 기능은 문자열 처리에서 매우 유용하게 활용된다.이 함수는 문자열 검색과 관련된 코딩 테스트에서 자주 출제되는 유형 중 하나이다. 예를 들어, 주어진 문자열에서 특정 단어가 몇 번 나타나는지를 확인하는 문제가 있을 수 있다. 이때 string::find() 함수를 사용하면 효율적으로 문제를 해결할 수 있다.설명string::find() 함수는 다음과 같은 형식을 가진다:size_t find(const string& str, size_t pos =..

Programming/C++ 2025.02.11

std::move의 개념과 활용

개요C++11에서 도입된 std::move는 객체의 소유권을 이동(move semantics) 시키는 역할을 한다. 이는 객체 복사를 줄이고 성능을 최적화하는 데 중요한 기법이다. 특히 동적 메모리를 많이 사용하는 경우, 복사 연산을 피하고 기존 자원을 재사용함으로써 불필요한 성능 저하를 방지할 수 있다.본 논문에서는 std::move의 개념을 설명하고, 다양한 예제 코드를 통해 활용법을 분석한다.설명std::move란?std::move는 C++ 표준 라이브러리 헤더에 정의된 유틸리티 함수로, 좌값(lvalue)을 우값(rvalue)으로 변환하는 역할을 한다.다음과 같은 특징을 갖는다:std::move 자체는 객체의 이동을 수행하지 않으며, 단순히 우값 참조(rvalue reference) 로 변환하는..

Programming/C++ 2025.02.05

Vector 최대값, 최소값, 인덱스 구하기

개요C++의 헤더에는 다양한 유용한 알고리즘이 포함되어 있으며, 그중 std::max_element는 컨테이너에서 가장 큰 값을 가진 원소를 찾는 기능을 제공한다. 이번 포스팅에서는 std::max_element의 사용법을 예제와 함께 자세히 살펴보자.설명std::max_element는 주어진 범위에서 가장 큰 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다.이 함수는 선형 탐색(O(n))을 수행하며, 기본적으로 operatorstd::max_element는 헤더에 정의되어 있으며, 다음과 같은 두 가지 형태로 사용된다.std::min_element는 주어진 범위에서 가장 작은 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다. max_element와 사용법이 동일하므로 본..

Programming/C++ 2025.02.04

람다 식(Lambda Expression)

개요람다식은 C++11 이상에서 도입된 기능으로, 함수의 인수로 호출되거나 전달되는 위치에서 정의되는 함수 객체이다. 이는 개발자가 특정한 동작을 수행할 수 있도록 코드 블록을 간편하게 캡슐화할 수 있게 해준다. 람다식은 특히 간단한 연산이나 조건을 필요로 하는 경우에 유용하다. 본 글에서는 람다식의 정의, 주요 기능 및 다양한 예제를 살펴보고자 한다.설명람다식의 기본 구조는 다음과 같다:1. 캡처(capture): 외부 변수에 접근하기 위한 방법으로, 값으로 캡처할 것인지 참조로 캡처할 것인지를 지정한다. 예를 들어, [&]는 모든 외부 변수를 참조로 캡처(외부 변수에 대한 업데이트를 반영이 가능)하고, [=]는 값으로 캡처한다. [ ]는 람다 식의 본문이 외부 변수에 액세스하지 않음을 나타낸다.2. ..

Programming/C++ 2025.01.30

string - substr 함수

개요C++의 string 클래스는 문자열을 다루기 위한 다양한 기능을 제공한다. 그 중 substr 함수는 문자열의 일부를 추출하는 데 사용된다. 이 함수는 특정 위치에서 시작하여 지정된 길이만큼의 서브스트링을 반환한다. 본 글에서는 substr 함수의 사용법과 특징을 설명하고, 예제 코드를 통해 실제 활용 사례를 제시한다.설명substr 함수는 std::string 클래스의 멤버 함수로, 다음과 같은 형식을 가진다:string substr(size_t pos = 0, size_t len = npos) const;pos: 서브스트링의 시작 위치를 지정하는 매개변수이다. 기본값은 0이며, 이는 문자열의 처음을 의미한다.len: 추출할 서브스트링의 길이를 지정하는 매개변수이다. 기본값은 npos로, 이는 문..

Programming/C++ 2025.01.29

vector정렬시 변경된 index도 정렬하기

개요코딩 테스트에서 주어진 벡터를 정렬한 후, 정렬된 벡터의 원래 인덱스를 활용해야 했다.정렬이 이루어진 후에는 0번째, 1번째, 2번째 등의 인덱스가 임의의 순서로 섞이게 된다.예) 3번째, 0번째, 2번째, 4번째, 1번째 ...이 글에서는 벡터의 값을 정렬한 후, 원래 인덱스의 순서가 어떻게 변화하는지를 확인하는 방법을 소개한다.핵심 코드 - itoa, sort + 람다함수의 사용index를 저장할 벡터 indices를 주어진 벡터 크기만큼 생성한다.vector v {4, 1, 3, 5, 2}; vector indices(v.size()); iota함수를 이용해 0부터 1씩 증가한 인덱스를 저장한다.#include ... iota(indices.begin(), indices.end(), 0); ..

Programming/C++ 2025.01.28

Split 함수 만들기 #2 - string delimiter

개요앞서 포스팅한 글에서 언급했듯이, C++ 에는 delimiter를 이용한 split 함수가 없다. 필요한 경우, split 함수를 직접 만들어 활용해야 한다. 이번 글에서는 delimiter를 char 단위가 아닌 string단위로 활용하여 split 함수를 구현해 보자. 💡 delimiter가 char단위가 아닌 string단위이기 때문에, 보다 범용적으로 쓰일 수 있다.사용 방법strfind로 delimiter가 해당하는 위치를 찾는다.찾을 문자열의 0번째부터 strfind로 찾은 위치까지를 string 형식의 token으로 저장한다.token을 벡터에 저장한다.token부분을 찾을 문자열에서 지운다.2~4를 반복한다.찾을 문자열의 남은 부분을 벡터에 저장한다.결과를 리턴한다.핵심 코드vecto..

Programming/C++ 2025.01.26
728x90
반응형