이 글에서는 크기가 같은 두 개의 정렬된 배열에서 중앙값(median)을 구하는 방법을 알아봅니다. 배열 요소는 C++ STL의 vector를 사용해 저장하며, 두 배열을 하나로 병합한 후 중앙값을 계산합니다.크기가 같은 두 배열을 병합하면 최종 배열의 요소 개수는 항상 짝수가 됩니다. 따라서 가운데 위치한 두 개의 요소를 선택하고, 이들의 평균값을 중앙값으로 반환하면 됩니다.알고리즘median(arr1, arr2)Begin arr3 := arr1과 arr2를 병합한 배열  
이번 글에서는 C 언어로 프로그램을 작성하여 복리(Compound Interest)를 계산하는 방법을 알아보겠습니다. 계산 로직 자체는 매우 간단하며, 다음과 같은 세 가지 매개변수만 준비하면 됩니다. P − 원금 (Principle Amount) R − 연 이자율 (Rate of Interest) T − 투자 기간 (Time Span) 복리를 계산하는 수학 공식은 다음과 같습니다. 공식에서 확인할 수 있듯이, 원금에 (1 + 이자율 ÷ 100)을 기간(T)만큼 거듭제곱한 값을 곱하면 복리가 반영된 최종 금액을 구할 수 있습니
이번 문제에서는 처음 n개의 자연수의 세제곱합(1³ + 2³ + 3³ + ... + n³)을 구하는 방법을 알아보겠습니다.가장 기본적인 접근 방법은 1부터 n까지 반복하는 for 루프를 사용하는 것입니다. 각 단계마다 해당 항의 세제곱을 계산한 후 누적 합계에 더해주면 됩니다. 이 방법은 시간 복잡도가 O(n)으로, n이 커질수록 실행 시간이 비례하여 늘어납니다.하지만 O(1), 즉 상수 시간에 문제를 해결하고 싶다면 다음과 같은 수열 공식을 활용할 수 있습니다.처음 n개의 자연수의 세제곱합 = [n(n+1)/2]²알고리즘cubeN
하나의 긴 정수가 주어졌을 때, 홀수 위치에 있는 자릿수들의 합과 짝수 위치에 있는 자릿수들의 합의 차이가 0인지 아닌지를 판별해야 합니다. 여기서 위치는 가장 왼쪽 자릿수부터 0으로 시작합니다.예를 들어 숫자가 156486이라고 가정해 보겠습니다. 홀수 위치 자릿수의 합은 (5 + 4 + 6) = 15이고, 짝수 위치 자릿수의 합은 (1 + 6 + 8) = 15입니다. 따라서 두 합은 서로 같습니다.문제 해결 접근 방법이 문제는 두 가지 방법으로 해결할 수 있습니다.첫 번째 방법: 숫자를 처음부터 끝까지 순회하면서 위치를 번갈아
이 글에서는 하나의 숫자에 대한 모든 소인수(素因數)를 효율적으로 구하는 방법을 알아보겠습니다. 예를 들어 n = 1092가 주어졌다면, 1092의 소인수는 2, 2, 3, 7, 13입니다. 이 문제를 해결하려면 다음 두 가지 규칙을 따르면 됩니다.숫자가 2로 나누어 떨어지면 2를 출력하고, 더 이상 나누어 떨어지지 않을 때까지 계속해서 2로 나눕니다.이 과정이 끝나면 남은 숫자는 반드시 홀수입니다. 이제 3부터 해당 숫자의 제곱근(√n)까지 홀수만을 대상으로 반복하면서, 현재 값 i로 나누어 떨어지면 i를 출력하고 숫자를 i로 나
확장 유클리드 알고리즘이란?확장 유클리드 호제법(Extended Euclidean Algorithm)은 전통적인 유클리드 호제법을 확장한 알고리즘입니다. 단순히 두 정수 a와 b의 최대공약수(GCD)만 구하는 것이 아니라, 다음과 같은 베주 항등식(Bézouts identity)을 만족하는 정수 계수 x와 y까지 함께 찾아줍니다.ax + by = gcd(a, b)이 알고리즘은 재귀 호출을 통해 gcd(a, b)를 gcd(b mod a, a) 형태로 갱신해 나가며, 각 단계에서 얻은 계수 값을 거꾸로 추적하여 최종 결과를 계산합니다.
이 글에서는 주어진 숫자의 가장 큰 소인수를 효율적으로 구하는 방법을 알아보겠습니다.예를 들어 n = 1092라는 숫자가 있다고 가정해 보겠습니다. 1092의 소인수는 2, 2, 3, 7, 13이며, 따라서 가장 큰 소인수는 13입니다. 이 문제를 해결하기 위해서는 다음과 같은 규칙을 따라야 합니다.숫자가 2로 나누어 떨어지면 최댓값(max)으로 2를 저장하고, 나누어 떨어지지 않을 때까지 숫자를 계속 2로 나눕니다.이 과정을 거치면 남은 숫자는 반드시 홀수가 됩니다. 이제 3부터 숫자의 제곱근까지 2씩 증가시키며(홀수만 검사) 탐
개요이 글에서는 주어진 숫자의 모든 홀수 소인수의 합을 효율적인 방법으로 구하는 프로그램을 C 언어로 작성해 보겠습니다.예를 들어 n = 1092라고 가정해 봅시다. 이 숫자의 소인수는 2, 2, 3, 7, 13입니다. 여기서 홀수인 인수만 골라 더하면 3 + 7 + 13 = 23이 됩니다.이 문제를 해결하려면 다음 규칙을 따르면 됩니다.숫자가 2로 나누어떨어지면 해당 인수는 무시하고, 숫자를 2로 반복해서 나눕니다.이 과정을 거치면 숫자는 반드시 홀수가 됩니다. 이제 3부터 숫자의 제곱근(√n)까지 탐색하면서, 현재 값
정수 n이 주어졌을 때, 그 합이 완전제곱수(perfect square)가 되는 n개의 숫자를 찾아 출력하는 프로그램을 만들어야 합니다.핵심 아이디어가장 간단하고 확실한 방법은 첫 번째 홀수부터 시작하는 n개의 연속된 홀수를 출력하는 것입니다. 수학적으로 처음 n개의 홀수(1, 3, 5, 7, 9, ...)의 합은 항상 n²로 완전제곱수가 되기 때문입니다.입력 : 5출력 : 1 3 5 7 91+3+5+7+9 = 25, 즉 (5)²알고리즘START Step 1 : 크기를 나타내는 매크로 SIZ
개요이 튜토리얼에서는 C 언어를 활용해 사용자가 입력한 문자열에서 총 단어 수, 모음 개수, 그리고 사용자가 지정한 특정 문자의 등장 빈도를 한 번의 반복문으로 동시에 계산하는 방법을 소개합니다.예를 들어 I love my MOM이라는 문자열과 문자 M을 입력하면 다음과 같은 결과를 얻을 수 있습니다.입력 : 문자열 입력 : I love my MOM 찾을 문자 입력 : M M의 총 빈도 : 2 총 모음 개수 : 4 총 단어 수 : 4알고리즘프로그램의 전체적인 동작 흐름은 다음과 같습
이번 포스팅에서는 세 개의 문자열을 입력받고, 사용자가 직접 입력한 문자로 각 문자열의 모든 글자를 대체한 뒤 결과를 출력하는 C 프로그램을 다룹니다. 이후에는 수정된 세 개의 문자열을 하나로 연결(concatenate)하여 최종 결과를 화면에 보여줍니다.문제 정의예를 들어 tutorials, points, best라는 세 개의 문자열과 각각 x, y, z라는 치환 문자를 입력하면 다음과 같은 결과가 나와야 합니다.입력: 문자열 1 : tutorials → 치환 문자 : x 문자열 2 : points → 치환 문자 :
이 프로그램은 사용자가 입력한 배열에서 0부터 99 사이 범위에 존재하지 않는, 즉 누락된 값들을 찾아 화면에 표시합니다. 예를 들어 아래와 같은 입력이 주어지면 해당 범위 안에서 빠져 있는 숫자와 구간을 출력합니다. 입력 : array = {88, 105, 3, 2, 200, 0, 10}; 출력 : 1 4-9 11-87 89-99 여기서 105와 200은 범위(0~99)를 벗어나므로 무시되며, 나머지 값들 사이에서 비어 있는 숫자들이 결과로 출력됩니다. 알고리즘 핵심 아이디어는 크기가 MAX(100)인 불리언(flag) 배열을 활
문제 소개알고리즘 문제에서 자주 만나게 되는 상황 중 하나는 두 개의 정렬된 배열이 주어졌을 때, 두 배열에 공통으로 존재하지 않는 요소(고유 요소)만 골라서 출력하는 것입니다.예를 들어 다음과 같은 입력이 주어진다고 가정해 보겠습니다.입력 : array1[] = {1, 4, 6, 9, 12} array2[] = {2, 4, 7, 8, 9, 10}출력 : 1 2 6 7 8 10 12위 예시에서 4와 9는 두 배열 모두에 존재하는 공통 요소이므로 제외되고, 나머지 값들이 오름차순으로 출력됩니다.해결 아이디어: 투 포인터(T
이 프로그램은 사용자로부터 N값을 입력받아, 0부터 시작하여 1/4씩 증가하는 분수 형태의 수열 0, 1/4, 1/2, 3/4, 1, ...의 첫 N개 항을 차례대로 출력합니다.문제 예시예를 들어 N=5를 입력하면 다음과 같은 결과가 나타납니다.입력 : N = 5출력 : 0, 1/4, 1/2, 3/4, 1알고리즘핵심 아이디어는 각 항을 기약분수 형태로 만들기 위해 분자와 분모를 규칙적으로 결정하는 것입니다. 인덱스 i가 짝수인지 홀수인지, 그리고 4로 나누어떨어지는지에 따라 분자와 분모가 달라집니다.단계별 절차정수형 변수 num(분
이번 글에서는 사용자로부터 숫자 n을 입력받아, 1부터 n 사이에 있는 모든 소수(prime number)를 구한 후 역순(큰 수 → 작은 수)으로 출력하는 프로그램을 만들어 보겠습니다.예를 들어 30을 입력하면, 30 이하의 소수인 29, 23, 19, 17, 13, 11, 7, 5, 3, 2가 큰 수부터 차례대로 출력됩니다.입력 : 30출력 : 29 23 19 17 13 11 7 5 3 2알고리즘전체적인 동작 흐름은 다음과 같습니다.START 정수형 변수 n, i, j와 flag=0을 선언한다. 사용자로부터 숫자를 입력받아 n에
문제 개요 정수(int) 요소로 구성된 배열이 주어졌을 때, 배열의 요소들을 내림차순으로 정렬하여 출력하고, 각 숫자가 몇 번 등장했는지 빈도수(occurrence)를 함께 계산하는 것이 목표입니다. 입력 : arr[]={1,1,1,2,2,2,3,3,4,5,6,7,7} 출력 : 7 occurs: 2 6 occurs: 1 5 occurs: 1 4 occurs: 1 3 occurs: 2  
n×n 크기의 2차원 배열이 주어졌을 때, 해당 행렬을 안티스파이럴(anti-spiral, 역나선) 형태로 배치하여 출력하는 것이 이 글의 목표입니다. 안티스파이럴이란 일반적인 나선 순회의 정반대 순서로, 행렬의 가장 안쪽 원소부터 바깥쪽 테두리 방향으로 나선형을 거꾸로 그려 나가는 것을 의미합니다.문제 예시입력 : arr[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1
n×n 크기의 2차원 배열이 주어졌을 때, 해당 매트릭스의 주 대각선과 반대각선(안티 다이애고널)에 위치한 요소들을 순서대로 출력하는 것이 이번 글의 목표입니다.예를 들어 아래와 같은 4×4 매트릭스가 있다고 가정해 보겠습니다.입력 : arr[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 13, 14, 15, 16} 출력 : 1 6 11 16 4 7 10 13위 출력
이 글에서 다룰 과제는 정수 배열 안에서 1, 2, 3이라는 숫자가 모두 포함된 원소를 찾아 오름차순으로 출력하는 것입니다. 만약 조건을 만족하는 숫자가 하나도 없다면 프로그램은 -1을 출력해야 합니다. 예시 입력 : arr[] = {320,123,124,125,14532,126,340,123400,100032,13,32,3123,1100} 출력 : 123 3123 14532 100032 123400 배열에 1, 2, 3을 모두 포함하는 값들이 존재하므로 -1을 반환하지 않고, 조건을 충족하는 5개의 값(123, 3123, 14
문제 소개정수 배열이 주어졌을 때, 각 숫자의 자릿수 합(digit sum)이 소수(prime)가 되는 원소만 찾아 출력하는 것이 이번 문제의 목표입니다. 만약 조건을 만족하는 숫자가 하나도 없다면 -1을 반환하면 됩니다.입력 · 출력 예시입력: arr[] = {2, 4, 3, 19, 25, 6, 11, 12, 18, 7}출력: 2, 3, 25, 11, 12, 7결과에 포함된 숫자들을 살펴보면 그 기준을 쉽게 이해할 수 있습니다. 2, 3, 7은 한 자리 숫자로서 그 자체가 소수이므로 자릿수 합 역시 소수입니다. 두 자리 숫자 중에