설정된 비트(set bit)를 세는 것이란 주어진 정수에서 1의 개수를 세는 것을 의미합니다. 이를 해결하기 위한 다양한 방법이 존재하는데, 여기서는 정수의 이진수 표현(바이너리)에서 문자열에 포함된 1의 개수를 세는 방법을 살펴보겠습니다.1의 개수를 세려면 문자열을 순회하면서 각 요소를 하나씩 확인하고, 문자열 내 모든 1을 카운트하면 됩니다. 예를 들어 입력값이 17이라면 출력은 2가 됩니다. 왜냐하면 17의 이진수 표현인 10001에는 1이 두 개 포함되어 있기 때문입니다.입력: 양의 정수를 입력하세요: 6 출력: 2동작 원리
고유한 소인수란? 고유한 소인수(unique prime factor)는 어떤 수의 약수이면서 동시에 소수인 수를 말합니다. 소수란 1과 자기 자신, 단 두 개의 약수만을 가지는 수입니다. 이 문제의 목표는 주어진 숫자의 모든 고유한 소인수를 찾아 그 곱을 계산하는 것입니다. 예를 들어 n = 1092라고 가정해 보겠습니다. 1092의 소인수는 2, 3, 7, 13이며, 이들의 곱은 546입니다. 기본 접근 방법 가장 직관적인 방법은 2부터 n까지의 모든 수를 하나씩 확인하면서, n의 약수이면서 동시에 소수인 값을 찾아 곱하는 것입니
배열 곱셈 문제에서는 주어진 배열의 모든 원소를 곱한 후, 그 결과를 특정 숫자 n으로 나눈 나머지(remainder)를 구해야 합니다. 먼저 예제를 통해 문제를 살펴보겠습니다.입력: arr[] = { 12, 35, 69, 74, 165, 54 }; N = 47 출력: 14문제 설명배열이 {12, 35, 69, 74, 165, 54}와 같을 때, 모든 원소를 곱하면 (12 * 35 * 69 * 74 * 165 * 54) = 19107673200이 됩니다. 이 값을 47로 나누면 나머지는 14입니다.접근 방법가장 직관적인
소인수(Prime Factor)란?정수론에서 소인수란 어떤 양의 정수를 나머지 없이 정확히 나누어 떨어지게 하는 소수를 의미합니다. 이러한 소수들을 찾는 과정을 정수 인수분해(integer factorization) 또는 소인수분해(prime factorization)라고 부릅니다.예시: 288의 소인수는 다음과 같습니다.288 = 2 × 2 × 2 × 2 × 2 × 3 × 3문제 정의주어진 수를 소인수분해했을 때, 그중 가장 큰 소인수를 찾는 것이 목표입니다.입력: n = 124출력: 31이 가장 큰 소인수입니다!동작 원리예를 들
이진 탐색(Binary Search) 알고리즘은 비교와 분할 메커니즘에 기반해 동작하는 대표적인 탐색 알고리즘입니다. 하프 인터벌 탐색(half-interval search), 로그 탐색(logarithmic search), 또는 바이너리 초프(binary chop)라고도 불립니다.이진 탐색은 정렬된 배열 안에서 목표 값(target value)의 위치를 찾습니다. 먼저 목표 값을 배열의 중간 요소와 비교하는데, 두 값이 같다면 알고리즘은 해당 요소의 인덱스를 반환합니다. 만약 값이 같지 않다면 배열을 절반으로 나눠 탐색 범위를 좁
선택 정렬(Selection Sort)이란?선택 정렬은 배열에서 가장 작은 숫자를 찾아 첫 번째 위치에 배치하는 방식으로 동작하는 정렬 알고리즘입니다. 가장 작은 수가 배치된 위치의 다음 인덱스부터 다시 탐색을 시작하며, 이 과정을 배열 전체가 정렬될 때까지 반복합니다.개념을 더 쉽게 이해하기 위해 예를 들어 보겠습니다.배열 {6, 3, 8, 12, 9}가 있다고 가정해 봅시다. 이 배열에서 가장 작은 요소는 3입니다. 따라서 3을 첫 번째 위치에 놓으면 배열은 {3, 6, 8, 12, 9}가 됩니다. 이제 다시 가장 작은 수를 찾
소수(素數)란 1과 자기 자신, 딱 두 개의 수로만 나누어 떨어지는 수를 말합니다. 여기서 어떤 수의 약수란 그 수를 나누어 떨어지게 만드는 수를 의미합니다. 가장 작은 열 개의 소수는 다음과 같습니다.2, 3, 5, 7, 11, 13, 17, 23, 29, 31 소수가 아닌 수를 합성수라고 부릅니다. 합성수는 세 개 이상의 약수를 가진 수입니다. 그리고 1은 자기 자신으로만 나누어 떨어지기 때문에 소수도 합성수도 아닌 특별한 수입니다. 소수 판별 조건 어떤 수가 소수인지 확인하려면 다음 두 가지 조건을 모두 만족해야 합니다. 1
수열(series)이란 각 항이 공통된 규칙을 따르는 수들의 나열을 의미합니다. 대표적인 수열로는 매 항이 일정한 간격만큼 증가하는 등차수열(arithmetic progression), 매 항이 일정한 배율로 증가하는 등비수열(geometric progression) 등이 있으며, 그 외에도 다양한 패턴을 가진 수열들이 존재합니다.수열의 합을 구하려면 먼저 수열의 규칙을 분석하여 일반화된 공식을 유도하는 것이 가장 효율적입니다. 하지만 닫힌 형태의 공식(closed-form formula)이 바로 떠오르지 않는 경우에는, 고전적인
급수란 무엇인가? 급수(series)란 일정한 규칙을 따르는 수들의 나열을 의미하며, 수학에는 각기 고유한 논리나 공식으로 정의된 다양한 급수가 존재합니다. 이 문제에서는 아래와 같은 급수가 주어집니다. 2/3, -4/5, 6/7, -8/9, … 일반항 n번째 항(n은 1부터 시작)은 다음과 같이 정의할 수 있습니다. (-1)^(n+1) × (2n) / (2n + 1) 즉, 분자와 분모가 각각 2씩 커지며, 부호는 양수와 음수가 번갈아 나타나는 패턴을 가집니다. 접근 방법 급수의 합을 구하려면 마지막 n항까지 각 항을 부호에 맞게
등차수열(AP)이란?등차수열(Arithmetic Progression, AP)은 연속된 두 항 사이의 차이가 항상 일정한 수열을 의미합니다. 이 차이는 뒤의 항에서 앞의 항을 빼서 계산하며, 공차(common difference)라고 부릅니다.등차수열을 쉽게 이해하기 위해 간단한 예시를 살펴보겠습니다.5, 7, 9, 11, 13, 15, ...위 등차수열의 공차(d)는 2입니다. 즉, 모든 항이 바로 앞의 항보다 2씩 큽니다. 이 수열의 첫째 항(a)은 5입니다.n번째 항을 구하는 일반 공식은 다음과 같습니다.an = a + (n−
부분집합이란 무엇인가? 집합(Set)은 여러 데이터 요소를 하나로 묶어 놓은 자료구조입니다. 어떤 집합 B의 모든 원소가 집합 A에 속해 있다면, B를 A의 부분집합(subset)이라고 부릅니다. 예를 들어 A = {1, 2, 3}이라면 {1}, {2, 3} 등은 모두 A의 부분집합입니다. 문제 정의 이번 글에서 다룰 문제는 처음 n개의 자연수(1부터 n까지)로 이루어진 집합에 대해, 만들 수 있는 모든 부분집합의 원소를 전부 더한 총합을 구하는 것입니다. 즉, 가능한 모든 부분집합을 나열하고, 각 부분집합에 포함된 숫자들을 모두
처음 n개의 홀수의 제곱합이란?처음 n개의 홀수를 순서대로 제곱한 값들을 모두 더하는 것이 이 문제의 목표입니다.홀수의 제곱으로 이루어진 수열은 다음과 같습니다.1, 9, 25, 49, 81, 121 …각 항이 홀수의 제곱이라는 점을 이용하면, 이 수열을 다음과 같이 일반화하여 나타낼 수 있습니다.12, 32, 52, 72, 92, 112 …제곱합을 구하는 수학 공식이 수열의 합은 다음 공식을 사용하면 반복 계산 없이 한 번에 구할 수 있습니다.합 = n(2n+1)(2n−1)/3 = n(4n2 − 1)/3예시입력: N = 4 출력:
처음 n개 자연수의 제곱합(square-sum)의 합이란, 1부터 n까지 각 숫자에 대해 그 숫자까지의 제곱합을 구하고, 이 값들을 모두 더한 것을 의미합니다.예를 들어, 처음 4개 자연수에 대한 제곱합의 합은 다음과 같습니다.sum = (12) + (12 + 22) + (12 + 22 + 32) + (12 + 22 + 32 + 42) = 1 + 5 + 14 + 30 = 50처음 n개 자연수의 제곱합의 합을 구하는 두 가지 방법1) for 반복문 사용하기이 방법은 1부터 N까지 모든 숫자를 반복하면서 각 숫자까지의 제곱합을 계산하고
선형대수학에서 임의의 정방행렬(square matrix)은 항상 하나의 대칭 행렬(symmetric matrix)과 하나의 반대칭 행렬(skew-symmetric matrix)의 합으로 유일하게 분해할 수 있습니다. 이 글에서는 두 행렬의 정의, 분해 공식의 원리, 그리고 C++ 구현 예제까지 차근차근 살펴보겠습니다.대칭 행렬(Symmetric Matrix)전치 행렬(transpose)이 원래 행렬 자신과 같은 행렬을 대칭 행렬이라고 합니다.AT = A즉, (i, j) 위치의 성분과 (j, i) 위치의 성분이 항상 같다는 의미입니다
각 자릿수가 배열의 요소로 저장되어 있을 때, 이 배열이 나타내는 수에 1을 더하는 문제입니다. 배열은 음수가 아닌 숫자들로 구성되며, 가장 큰 자릿수(최상위 자릿수)가 배열의 첫 번째 요소에 위치합니다.1을 더하는 알고리즘 단계배열의 끝에서부터 살펴보며, 마지막 자릿수가 9보다 작으면 단순히 1을 더해 줍니다 (예: 4 → 5).마지막 요소가 9라면 해당 값을 0으로 바꾸고 올림수(carry)를 1로 설정합니다.다음 반복에서 올림수를 확인하고, 자릿수에 더했을 때 10이 되면 위와 동일한 과정을 반복합니다.올림수를 더한 후에는 다
숫자 n이 주어졌을 때, 1부터 n까지 자연수 각각의 제곱값에 대한 평균을 구하는 문제입니다. 풀이 과정은 다음 세 단계로 정리할 수 있습니다.1부터 n까지 각 자연수의 제곱을 구합니다.구한 제곱값들을 모두 더합니다.그 합을 n으로 나누면 평균이 완성됩니다.예시입력: 3출력: 4.666667풀이 설명1² + 2² + 3² = 1 + 4 + 9 = 1414 ÷ 3 = 4.666667즉, n = 3일 때 각 수를 제곱하여 더하면 14가 되고, 이를 개수인 3으로 나눈 값 4.666667이 바로 구하고자 하는 평균입니다.수학적 공식반복문
디지털 시스템에서 9의 보수(9s complement)와 10의 보수(10s complement)는 산술 연산을 더욱 간편하게 수행하기 위해 사용되는 개념입니다. 보수를 활용하면 뺄셈 연산을 덧셈으로 처리할 수 있어, 하드웨어 자원을 절약하면서도 효율적인 계산이 가능합니다.9의 보수(9s Complement) 구하는 방법임의의 숫자에 대한 9의 보수를 구하려면 해당 숫자를 (10n − 1)에서 빼면 됩니다. 여기서 n은 숫자의 자릿수입니다. 더 간단한 방법으로는, 주어진 십진수의 각 자릿수를 9에서 빼는 방식으로도 구할 수 있습니다
피보나치 수열이란?피보나치 수열은 이전 두 항의 합이 다음 항이 되는 규칙을 가진 수열입니다. 첫 번째 항은 0, 두 번째 항은 1로 시작하며, 그 이후의 모든 항은 앞의 두 항을 더한 값이 됩니다.이 문제에서는 피보나치 수열의 n번째 숫자를 구하는 것이 목표입니다. 이를 위해 수열의 모든 값을 차례대로 계산한 뒤, n개의 항을 화면에 출력하는 프로그램을 작성해 보겠습니다.입력 및 출력 예시입력: 8출력: 0 1 1 2 3 5 8 13동작 원리피보나치 수열은 다음과 같은 방식으로 진행됩니다.0 + 1 = 11 + 1 = 21 + 2
복리(Compound Interest)는 단리와 달리, 매년 발생한 이자를 원금에 더해 다시 이자를 계산하는 방식입니다. 이처럼 이자가 원금에 누적되면서 이자에 대한 이자가 붙기 때문에, 운용 기간이 길어질수록 단리 방식보다 훨씬 큰 수익을 얻을 수 있습니다. 이번 글에서는 C 언어를 활용해 복리를 계산하는 프로그램을 직접 작성해 보겠습니다. 예제 입력 및 출력 입력: p=5, r=4, t=5 출력: 1.083263 p : 원금 (Principal) r : 연 이자율 (Rate, %) t : 기간 (Time, 년) 복리 계산 과
세제곱합(Cube Sum)이란?처음 n개의 자연수의 세제곱합이란, 1부터 n까지의 모든 자연수를 각각 세제곱한 뒤 모두 더한 값을 의미합니다. 즉, 다음과 같은 급수의 합입니다.1³ + 2³ + 3³ + … + n³입력 및 출력 예시입력: 6출력: 441계산 과정 설명n이 6일 경우, 각 자연수를 세제곱하여 더하면 다음과 같습니다.1³ + 2³ + 3³ + 4³ + 5³ + 6³= 1 + 8 + 27 + 64 + 125 + 216= 441for 반복문을 이용한 구현for 반복문으로 숫자를 1부터 n까지 하나씩 증가시키면서, 각 숫자