문자열(string)은 널(null) 문자 \0로 끝나는 1차원 문자 배열입니다. C++에서는 한 문자열의 값을 다른 문자열로 복사할 수 있으며, 이는 표준 라이브러리 함수인 strcpy()를 사용하거나, 함수 없이 직접 구현하는 두 가지 방법으로 수행할 수 있습니다. 방법 1: strcpy() 함수 없이 문자열 복사하기 다음은 strcpy() 함수를 사용하지 않고 for 루프를 이용해 문자열을 복사하는 프로그램입니다. 예제 #include <iostream> using namespace std; int main()
문자열이란?문자열(string)은 널 문자(\0)로 종료되는 1차원 문자 배열입니다. 문자열에는 알파벳뿐만 아니라 숫자, 특수 기호 등 다양한 문자가 포함될 수 있습니다.이 글에서는 문자열에서 알파벳을 제외한 나머지 문자(숫자, 특수 문자 등)를 모두 제거하는 C++ 프로그램을 소개합니다.예제 코드#include <iostream> using namespace std; int main() { char str[100] = String@123!!; int i, j; cout<<String be
컴퓨터 시스템에서 8진수는 밑이 8인 기수법으로 표현되고, 10진수는 밑이 10인 기수법으로 표현됩니다. 즉, 8진수는 각 자리가 0부터 7까지의 숫자만 사용하며, 10진수는 0부터 9까지의 숫자를 사용합니다.아래 표는 대표적인 10진수와 이에 해당하는 8진수 값의 예시입니다.10진수8진수81070106253177이제 10진수를 8진수로 변환하는 C++ 프로그램을 살펴보겠습니다.예제 코드#include <iostream> using namespace std; void DecimalToOctal(int decimalNum)
문자열(string)은 널(null) 문자(\0)로 끝나는 1차원 문자 배열입니다. 문자열에서 문자의 빈도(frequency)란 해당 문자가 문자열 안에 몇 번 등장하는지를 나타내는 횟수를 의미합니다.빈도 개념 이해하기예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.String: Football is a sport 알파벳 o의 빈도: 3위 문자열에서 알파벳 o는 총 3번 등장하므로 빈도는 3이 됩니다. 이제 C++을 이용해 특정 알파벳의 빈도를 구하는 방법부터, 문자열에 포함된 모든 알파벳의 빈도를 한 번에 구하는 방법까지
음이 아닌 정수 n의 팩토리얼(계승)은 n보다 작거나 같은 모든 양의 정수를 곱한 값입니다.예를 들어, 6의 팩토리얼은 다음과 같이 계산됩니다.6! = 6 × 5 × 4 × 3 × 2 × 1 6! = 720정수의 팩토리얼은 크게 두 가지 방법, 즉 재귀(recursion)를 사용하는 방법과 반복(iteration)을 사용하는 방법으로 구할 수 있습니다. 이 글에서는 후자인 반복 방식을 살펴보겠습니다.for 반복문을 활용한 팩토리얼 계산반복 프로그램에서는 for 루프를 사용하여 숫자의 팩토리얼을 손쉽게 구할 수 있습니다. 아래 예제를
음이 아닌 정수 n의 계승(팩토리얼, Factorial)은 n보다 작거나 같은 모든 양의 정수를 곱한 값입니다.예를 들어 4의 계승은 다음과 같이 24입니다.4! = 4 * 3 * 2 * 1 4! = 24정수의 계승은 재귀(recursion) 방식 또는 반복(iteration) 방식으로 구할 수 있습니다. 이 글에서는 재귀 함수를 활용한 구현 방법을 살펴봅니다.예제 코드다음 프로그램은 재귀 함수를 사용하여 숫자의 계승을 구하는 방법을 보여줍니다.#include <iostream> using namespace std; in
행렬이란 무엇인가?행렬(matrix)은 숫자들을 행(row)과 열(column)의 직사각형 형태로 배열한 것입니다. 행렬은 선형대수학의 기본 개념으로, 그래픽 처리, 머신러닝, 과학 계산 등 다양한 분야에서 널리 활용됩니다.예를 들어, 아래와 같은 3×2 행렬은 3개의 행과 2개의 열로 구성되어 있습니다.8 1 4 9 5 6두 행렬의 곱셈이 성립하려면 첫 번째 행렬의 열 개수와 두 번째 행렬의 행 개수가 반드시 같아야 합니다. 결과 행렬의 각 원소는 첫 번째 행렬의 행 원소들과 두 번째 행렬의 열 원소들을 서로 곱한 뒤 모두 더한
희소 행렬이란 무엇일까요?희소 행렬(Sparse Matrix)은 행렬을 구성하는 요소 중 대다수가 0으로 채워져 있는 행렬을 의미합니다. 다시 말해, 행렬의 전체 요소 개수 중 절반 이상이 0이라면 해당 행렬을 희소 행렬이라고 부릅니다.예를 들어 아래 행렬에는 0이 총 5개 포함되어 있습니다. 행렬의 전체 요소는 9개이므로, 0의 개수(5개)가 절반(4.5개)보다 많기 때문에 이 행렬은 희소 행렬에 해당합니다.1 0 25 0 00 0 9희소 행렬 판별 C++ 프로그램다음은 주어진 행렬이 희소 행렬인지 아닌지를 판별하는 C++ 프로그
표준편차(Standard Deviation)는 데이터 속 숫자들이 평균을 중심으로 얼마나 넓게 퍼져 있는지를 나타내는 통계적 측정값입니다. 수학적으로는 분산(variance)의 제곱근이며, 분산이란 각 데이터 값에서 평균을 뺀 차이를 제곱한 뒤 그 평균을 구한 값입니다.아래는 이러한 표준편차를 계산하는 C++ 프로그램 예제입니다.C++ 표준편차 계산 예제#include <iostream> #include <cmath> using namespace std; int main() {
C++ 구조체란?구조체(structure)는 서로 다른 데이터 타입을 가진 항목들을 하나로 묶은 사용자 정의 자료형입니다. 여러 종류의 데이터 레코드를 포함하는 복잡한 데이터 구조를 만들어야 할 때 매우 유용하며, struct 키워드를 사용하여 정의합니다.구조체의 기본적인 예시는 다음과 같습니다.struct employee { int empID; char name[50]; float salary; };위 구조체는 직원의 ID(int), 이름(char 배열), 급여(float)처럼 서로 다른 타입의 멤버 변수들을
행렬(matrix)은 숫자들을 행(row)과 열(column) 형태로 배열한 직사각형 배열입니다.예를 들어, 아래와 같은 행렬이 있을 수 있습니다.3×4 행렬은 아래와 같이 3개의 행과 4개의 열로 구성됩니다.8 6 3 5 7 1 9 2 5 1 9 8행렬 곱셈 프로그램 예제다음은 두 개의 행렬을 함수에 인수로 전달하여 곱하는 C++ 프로그램입니다.#include<iostream> using namespace std; void MatrixMultiplication(int a[2][3],int b[3][3]) { in
행렬이 가역(invertible)인지, 즉 역행렬이 존재하는지 판단하는 가장 기본적인 방법은 행렬식(determinant)을 계산하는 것입니다. 행렬식이 0이 아니면 해당 행렬은 가역이며, 행렬식이 0이면 역행렬이 존재하지 않습니다.예를 들어 다음과 같은 경우를 살펴보겠습니다.주어진 행렬:4 2 12 1 19 3 2위 행렬의 행렬식: 3따라서 이 행렬은 가역입니다.C++ 가역성 판별 프로그램아래 프로그램은 사용자로부터 행렬의 크기와 원소를 입력받아 행렬식을 재귀적으로 계산한 뒤, 그 값이 0인지 아닌지에 따라 행렬의 가역 여부를 출
행렬식(Determinant)이란? 정사각 행렬의 행렬식은 행렬을 구성하는 원소 값들을 이용해 계산할 수 있는 스칼라 값입니다. 행렬 A의 행렬식은 보통 det(A)로 표기하며, 기하학적으로는 해당 행렬이 나타내는 선형 변환에서 길이·넓이·부피가 늘어나거나 줄어드는 배율, 즉 스케일링 인자(scaling factor)라고도 불립니다. 간단한 2×2 행렬의 행렬식 계산 예는 다음과 같습니다. 행렬: 3 1 2 7 행렬식 = 7×3 − 2×1 = 21 − 2 = 19 따라서 행렬식은 19입니다. 행렬식 계산 C++ 프로그램 다음은 사용
행렬의 곱셈이 가능한 조건두 행렬은 서로 곱할 수 있을 때 곱셈 가능(multiplicable)하다고 합니다. 행렬의 곱셈은 첫 번째 행렬의 열 수가 두 번째 행렬의 행 수와 같을 때만 정의됩니다. 이 조건을 만족하지 못하면 두 행렬의 곱은 계산할 수 없습니다.예를 들어 다음과 같은 경우를 생각해 볼 수 있습니다.첫 번째 행렬의 행 수 = 3 첫 번째 행렬의 열 수 = 2 두 번째 행렬의 행 수 = 2 두 번째 행렬의 열 수 = 5 첫 번째 행렬의 열 수(2)와 두 번째 행렬의 행 수(2)가 같으므로 두 행렬은 곱셈이 가능하며,
트리 순회(Tree Traversal)는 그래프 순회의 한 형태로, 트리에 속한 모든 노드를 정확히 한 번씩 방문하며 값을 확인하거나 출력하는 과정을 말합니다. 이진 탐색 트리(Binary Search Tree)의 전위 순회(Preorder Traversal)는 루트(Root) → 왼쪽(Left) → 오른쪽(Right) 순서로 각 노드를 방문하는 방식입니다.전위 순회 예시다음과 같은 이진 트리가 주어졌다고 가정해 보겠습니다.이 트리에 대한 전위 순회 결과는 다음과 같습니다.Preorder Traversal: 6 4 1 5 8C++
트리 순회란 무엇인가?트리 순회(Tree Traversal)는 그래프 순회의 한 형태로, 트리에 속한 모든 노드를 정확히 한 번씩 방문하면서 확인하거나 출력하는 과정을 의미합니다. 그중에서도 이진 탐색 트리(Binary Search Tree)의 중위 순회(Inorder Traversal)는 (왼쪽 → 루트 → 오른쪽) 순서로 각 노드를 방문하는 방식입니다.중위 순회의 대표적인 예시를 살펴보겠습니다. 다음과 같은 이진 트리가 주어졌다고 가정해 보겠습니다.이 트리를 중위 순회하면 다음과 같은 결과가 나옵니다.1 4 5 6 8중위 재귀
트리 순회(Tree Traversal)는 그래프 순회의 한 형태로, 트리에 속한 모든 노드를 정확히 한 번씩 방문하거나 출력하는 과정을 말합니다. 그중에서도 이진 탐색 트리(Binary Search Tree)의 후위 순회(Postorder Traversal)는 왼쪽 → 오른쪽 → 루트 순서로 각 노드를 방문하는 방식입니다.후위 순회의 동작 방식후위 순회에서는 먼저 왼쪽 서브트리 전체를 방문한 후, 오른쪽 서브트리를 방문하고, 마지막으로 루트 노드를 방문합니다. 예를 들어 아래와 같은 이진 트리가 주어졌다고 가정해 보겠습니다.이 트리
힙 정렬(Heap Sort)은 이진 힙(Binary Heap) 자료구조를 기반으로 하는 정렬 알고리즘입니다. 이진 힙에서는 최대 힙(Max Heap)의 경우 부모 노드가 자식 노드보다 크거나 같고, 최소 힙(Min Heap)의 경우 부모 노드가 자식 노드보다 작거나 같습니다.힙 정렬의 동작 과정다음 예제를 통해 힙 정렬의 모든 단계를 살펴보겠습니다.1단계: 원본 배열정렬하기 전 10개 요소로 구성된 원본 배열은 다음과 같습니다.2071541015902377252단계: 최대 힙 구성이 배열은 max-heapify 연산을 사용하여 이진
양의 정수 n의 팩토리얼(계승)은 1부터 n까지의 모든 양의 정수를 곱한 값으로, 1×2×3×…×n과 같이 표현됩니다. 예를 들어 5! = 1×2×3×4×5 = 120입니다. 반면 음수의 팩토리얼은 수학적으로 정의되지 않으므로 존재하지 않습니다.여기서는 동적 프로그래밍(Dynamic Programming) 기법을 활용하여 입력된 숫자의 팩토리얼을 구하는 C++ 프로그램을 소개합니다. 동적 프로그래밍 방식에서는 이미 계산된 하위 문제의 결과를 배열에 저장하고 재활용하기 때문에, 재귀 호출에 비해 함수 호출 오버헤드가 없고 중복 계산도
트리 순회란 무엇인가? 트리 순회(Tree Traversal)는 그래프 순회의 한 형태로, 트리에 속한 모든 노드를 정확히 한 번씩 방문하거나 출력하는 과정을 의미합니다. 그중 선위 순회(Preorder Traversal)는 루트 노드를 가장 먼저 방문한 뒤, 왼쪽 서브트리, 마지막으로 오른쪽 서브트리를 순서대로 탐색하는 방식입니다. 즉, (루트 → 왼쪽 → 오른쪽) 순서로 진행됩니다. 예를 들어 다음과 같은 이진 트리가 주어졌다고 가정해 보겠습니다. 이 트리의 선위 순회 결과는 다음과 같습니다. 5 3 2 4 8 9 이제 재귀