이번 튜토리얼에서는 C++을 사용하여 복리(compound interest)를 계산하는 프로그램을 작성하는 방법을 알아보겠습니다.복리란 이전 기간까지 발생한 이자를 원금에 합산한 뒤, 그 합산된 금액을 기준으로 다시 이자를 계산하는 방식입니다. 단리와 달리 이자에 대한 이자가 발생하기 때문에 시간이 지날수록 금액이 기하급수적으로 증가하는 것이 특징입니다.복리 계산 공식복리는 아래와 같은 수식으로 구할 수 있습니다.CI = P × (1 + R / 100)TP: 원금(principal)R: 연이율(rate, %)T: 투자 기간(time
개요이 튜토리얼에서는 C++을 사용하여 상관 계수(Correlation Coefficient)를 계산하는 프로그램을 작성하는 방법을 알아봅니다.상관 계수는 두 변수 사이의 관계가 얼마나 강한지를 나타내는 통계적 지표입니다. 값의 범위는 -1부터 +1까지이며, +1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계를 의미합니다.여기서는 두 개의 배열이 주어졌을 때, 해당 값들 사이의 관계 강도를 나타내는 상관 계수를 구하는 것이 목표입니다.피어슨 상관 계수 공식본 예제에서 사용되는 것은 가장 널리 쓰이는 피어슨
문제 소개 이 튜토리얼에서는 주어진 범위 안에서 약수의 개수가 홀수인 숫자의 개수를 구하는 C++ 프로그램을 살펴보겠습니다. 범위의 하한(lower limit)과 상한(upper limit)이 주어지면, 해당 구간에 속한 숫자들 중 약수의 개수가 홀수인 값이 몇 개인지 계산하는 것이 우리의 과제입니다. 핵심 원리: 완전제곱수만 약수가 홀수 개다 자연수의 약수는 일반적으로 쌍을 이루기 때문에 대부분 약수의 개수는 짝수입니다. 예를 들어 12의 약수는 (1, 12), (2, 6), (3, 4)의 세 쌍으로 총 6개입니다. 하지만 완전
이번 글에서는 C++를 이용해 두 데이터 집합의 공분산(Covariance)을 계산하는 프로그램을 만들어 보겠습니다. 공분산이란? 공분산은 두 확률 변수가 함께 얼마나 변하는지를 나타내는 통계적 척도입니다. 두 값이 같은 방향으로 움직이면 공분산은 양수가 되고, 반대 방향으로 움직이면 음수가 됩니다. 즉, 한 변수가 증가할 때 다른 변수도 증가하는 경향이 있으면 양의 공분산을, 하나는 증가하고 다른 하나는 감소하는 경향이 있으면 음의 공분산을 갖습니다. 표본 공분산은 다음 수식으로 정의됩니다. cov(X, Y) = Σ (xi − x
컬렌 수(Cullen Number)란?이 튜토리얼에서는 C++을 사용하여 컬렌 수(Cullen Number)를 구하는 프로그램을 작성하는 방법을 알아보겠습니다.컬렌 수는 아일랜드 출신 수학자 제임스 컬렌(James Cullen)의 이름에서 유래한 특수한 형태의 수열입니다. 임의의 정수 n이 주어졌을 때, 해당 위치의 컬렌 수는 다음 공식으로 계산할 수 있습니다.2n × n + 1계산 예시예를 들어 n = 2라면, 컬렌 수는 22 × 2 + 1 = 9가 됩니다.C++ 코드 구현다음은 비트 시프트 연산을 활용해 n번째 컬렌 수를 구하는
개요이 튜토리얼에서는 세 점을 지나는 평면의 방정식을 구하는 C++ 프로그램을 다룹니다. 세 개의 좌표가 주어졌을 때, 해당 점들을 모두 지나는 평면의 방정식을 계산하는 것이 목표입니다.접근 방법평면의 방정식은 일반적으로 ax + by + cz + d = 0 형태로 표현됩니다. 세 점을 지나는 평면을 구하려면 다음 단계를 따릅니다.1. 첫 번째 점 P1(x1, y1, z1)에서 두 번째 점 P2(x2, y2, z2)로 향하는 벡터와, P1에서 세 번째 점 P3(x3, y3, z3)으로 향하는 벡터를 구합니다.2. 두 벡터의 외적(c
이 튜토리얼에서는 처음 N개의 Iccanobif 수를 구하는 프로그램을 작성하는 방법을 살펴보겠습니다.Iccanobif 수는 피보나치 수와 매우 유사한 수열입니다. 다만 한 가지 중요한 차이점이 있는데, 바로 이전 두 수를 더할 때 각 수의 자릿수를 먼저 뒤집은 후 더한다는 점입니다.예를 들어 이전 두 항이 13과 39라고 가정해 보겠습니다. 일반적인 피보나치 수열이라면 13 + 39 = 52가 되지만, Iccanobif 수열에서는 13을 뒤집어 31로, 39를 뒤집어 93으로 만든 뒤 더하므로 31 + 93 = 124가 됩니다.접
이 튜토리얼에서는 C++를 사용하여 부동 소수점(floating point) 숫자의 최대공약수(GCD, Greatest Common Divisor)를 구하는 프로그램을 살펴봅니다.일반적인 정수의 GCD와 달리, 실수에 대한 GCD는 오차 범위를 고려해야 하기 때문에 접근 방식이 조금 다릅니다. 여기서는 두 개의 실수가 주어졌을 때, 해당 숫자들의 최대공약수를 계산하는 것이 우리의 목표입니다.접근 방식부동 소수점 숫자의 GCD는 유클리드 호제법(Euclidean Algorithm)을 재귀적으로 확장하여 구할 수 있습니다. 핵심 아이디
이번 튜토리얼에서는 중학교 방식(Middle School Procedure)을 이용해 두 수의 최대공약수(GCD, Greatest Common Divisor) 또는 최대공약수(HCF, Highest Common Factor)를 구하는 C++ 프로그램을 다룹니다.두 개의 정수가 주어졌을 때, 해당 값들의 소인수분해를 통해 공통 인수를 찾고, 그중 지수가 가장 작은 항들을 곱하여 최대공약수를 계산하는 것이 이 방식의 핵심 원리입니다.알고리즘의 기본 원리중학교 시절 수학 시간에 배운 소인수분해 방법을 그대로 활용합니다. 예를 들어 10과
이 튜토리얼에서는 C++을 사용하여 두 수의 최대공약수(GCD)와 HCF(Highest Common Factor, 최대공약수)를 구하는 프로그램을 살펴보겠습니다.GCD와 HCF는 사실상 같은 개념으로, 두 수가 공통으로 가지는 약수 중 가장 큰 값을 의미합니다. 이 문제에서는 두 개의 숫자가 입력으로 주어지며, 우리의 목표는 해당 두 수의 GCD 또는 HCF를 계산하여 출력하는 것입니다.구현 방법아래 코드는 재귀 함수를 활용한 유클리드 호제법(Euclidean Algorithm)의 변형으로 문제를 해결합니다. 로직은 다음과 같습니다
개요이 튜토리얼에서는 C++을 활용해 aⁿ과 bⁿ 중 어느 값이 더 큰지 판별하는 프로그램을 살펴봅니다.세 개의 정수 a, b, n이 주어졌을 때, aⁿ과 bⁿ을 계산한 결과 중 더 큰 값을 찾아 출력하는 것이 과제입니다.접근 방법n이 커지면 aⁿ과 bⁿ을 직접 계산하는 과정에서 오버플로우가 발생할 위험이 있습니다. 다행히 두 값을 실제로 구하지 않아도 비교만으로 결과를 얻을 수 있으며, 핵심은 지수 n의 홀짝 여부입니다.n이 짝수인 경우: 음수를 짝수 번 곱하면 양수가 되므로, a와 b의 절댓값(|a|와 |b|)을 비교하면 됩니다
이 튜토리얼에서는 두 수의 최대공약수(HCF, Highest Common Factor)를 구하는 프로그램을 다룹니다.두 개의 숫자가 주어졌을 때, 두 수가 공통으로 가지는 약수 중 가장 큰 값을 찾아 반환하는 것이 목표입니다. 최대공약수는 GCD(Greatest Common Divisor)라고도 부르며, 재귀 함수를 활용하면 간단하게 구현할 수 있습니다.예시 코드#include <stdio.h>// 재귀 호출을 통해 HCF(최대공약수)를 구하는 함수int gcd(int a, int b){ &
이 글에서는 C++를 이용해 주어진 직사각형을 정확히 k번 잘랐을 때, 만들어지는 가장 작은 조각의 면적이 최대가 되도록 하는 값을 구하는 방법을 다룹니다.문제의 조건은 다음과 같습니다. 직사각형의 두 변의 길이와 자를 수 있는 횟수 k가 주어지며, 각 컷은 하나의 조각을 두 개로 나눕니다. 우리의 목표는 k번의 컷을 모두 사용한 후 남는 조각 중 가장 작은 것의 면적을 최대화하는 것입니다.해결 아이디어핵심 로직은 다음과 같습니다.컷 횟수 k가 (n + m - 2)보다 크면 더 이상 자를 수 없으므로 Not possible을 출력합
이 튜토리얼에서는 주어진 숫자가 한 자릿수로 줄어들 때까지 자릿수의 합과 곱을 반복해서 계산하고, 그 결과 중 최대값을 구하는 프로그램을 C++로 작성하는 방법을 다룹니다.문제의 조건은 다음과 같습니다. 임의의 정수 하나가 주어지면, 그 숫자의 각 자릿수를 더한 값과 곱한 값을 각각 구합니다. 만약 그 결과가 여전히 두 자릿수 이상이라면, 같은 과정을 한 자릿수가 될 때까지 반복합니다. 최종적으로 얻어진 두 개의 한 자릿수 값 중에서 더 큰 값을 출력하면 됩니다.핵심 아이디어자릿수의 반복 합(repeated sum)은 소위 디지털
이 튜토리얼에서는 C++를 사용하여 이진 트리(Binary Tree)에서 부모 노드와 두 자식 노드 값의 합이 가장 큰 경우를 찾는 방법을 알아보겠습니다.문제의 조건은 다음과 같습니다. 하나의 이진 트리가 주어지며, 왼쪽 자식과 오른쪽 자식을 모두 가진 노드(부모 노드)에 대해서만 해당 노드와 두 자식 노드의 값을 더합니다. 이렇게 계산한 모든 합계 중에서 최댓값을 구해 출력하는 것이 우리의 목표입니다.알고리즘 접근 방식이 문제는 재귀(Recursion)를 활용한 트리 순회로 간단히 해결할 수 있습니다.트리를 순회하면서 각 노드를
이 튜토리얼에서는 나눗셈 조건(divisibility condition)을 만족하는 점프 이동이 가능할 때, 배열의 각 위치별로 얻을 수 있는 최대 경로 합(maximum path sum)을 구하는 방법을 알아보겠습니다.문제 상황은 다음과 같습니다. n개의 임의의 정수로 이루어진 배열이 주어지며, 현재 위치에서 다른 위치로 점프하려면 목적지 위치가 현재 위치를 나누어 떨어지게 해야 합니다. 우리의 과제는 모든 시작 위치에 대해 이 규칙에 따라 이동할 때 만들 수 있는 경로 합의 최댓값을 계산하는 것입니다.알고리즘 접근 방식이 문제는
이 튜토리얼에서는 0번째 행의 임의의 셀에서 시작하여 (N-1)번째 행의 임의의 셀에서 끝나는 최대 경로 합을 구하는 프로그램을 C++로 작성해 보겠습니다.이 문제에서는 N×N 크기의 행렬이 주어지며, 각 셀에서는 아래 세 가지 방향으로만 이동할 수 있습니다.(i+1, j) : 바로 아래(i+1, j-1) : 왼쪽 아래 대각선(i+1, j+1) : 오른쪽 아래 대각선즉, 0번째 행의 어떤 셀이든 출발점으로 자유롭게 선택한 뒤, 위 규칙에 따라 마지막 행까지 이동하면서 지나간 셀 값들의 합이 최대가 되는 경로를 찾아야 합니다.접근 방
문제 소개이 튜토리얼에서는 두 사람이 이동 중 딱 한 번 만날 수 있을 때, 수집할 수 있는 최대 포인트를 구하는 프로그램을 C++로 작성해 보겠습니다.각 칸에 포인트 값이 담긴 행렬(matrix)이 주어집니다. 두 사람은 서로 다른 모서리에서 출발하여 인접한 칸으로 이동하며, 이동 과정에서 정확히 한 번 만나야 합니다. 우리가 찾아야 하는 것은 두 사람이 만나기까지 수집한 포인트의 합이 최대가 되는 경로입니다.접근 방식: 동적 계획법(DP)이 문제는 동적 계획법을 활용하면 효율적으로 해결할 수 있습니다. 기본 아이디어는 다음과 같
이 튜토리얼에서는 하나의 구간(interval)을 제거한 후 남는 최대 커버리지를 구하는 프로그램을 C++로 작성해 보겠습니다.문제 정의N개의 구간과 최대 범위 값 Q가 주어집니다. 우리의 목표는 N개의 구간 중 단 하나를 제거했을 때, 1부터 Q까지 범위에서 커버되는 숫자의 개수가 최대가 되도록 하는 구간을 찾는 것입니다.접근 방법이 문제는 다음과 같은 단계로 해결할 수 있습니다.각 위치별로 해당 위치를 덮고 있는 구간의 개수를 기록합니다(Mark 배열).전체에서 커버되는 위치의 총 개수를 셉니다.정확히 하나의 구간에만 의존하는
이 튜토리얼에서는 행렬의 왼쪽 상단에서 오른쪽 하단까지 이동한 뒤 다시 출발점으로 돌아오는 전체 경로에서 수집할 수 있는 최대 포인트를 구하는 프로그램을 다룹니다.문제 개요주어지는 행렬은 다음 세 가지 문자로 구성됩니다.# : 지나갈 수 없는 막힌 경로* : 수집할 수 있는 포인트. : 자유롭게 통과할 수 있는 경로목표는 한쪽 구석에서 반대편 구석으로 이동(오른쪽·아래 방향만 허용)한 후, 되돌아오는 길(왼쪽·위 방향만 허용)까지 합쳐 가장 많은 포인트를 수집하는 것입니다.핵심 아이디어왕복 경로를 그대로 시뮬레이션하기보다는, 두 사