개요정렬되지 않은 배열이 주어졌을 때, 해당 배열의 평균(mean)과 중앙값(median)을 계산하는 것이 이번 글의 목표입니다. 평균은 데이터의 전체적인 수준을 나타내는 대표값이며, 중앙값은 데이터를 크기 순으로 나열했을 때 가운데 위치하는 값입니다. 각각의 개념과 계산 방법, 그리고 C++ 구현 예제를 순서대로 살펴보겠습니다.평균(Mean) 계산 방법평균은 배열에 담긴 모든 값들을 더한 뒤, 요소의 총 개수로 나누어 구합니다. 다음 공식을 사용하면 됩니다.평균 = (배열 요소들의 합) / (요소의 총 개수)중앙값(Median)
이 글에서는 값 n이 주어졌을 때, 해당 n에 대한 중심이십면체 수(Centered Icosahedral Number)를 계산하고, n까지의 중심이십면체 수열을 생성하여 결과를 출력하는 C++ 프로그램을 다룹니다.중심이십면체 수란 무엇인가?중심이십면체 수는 이십면체(icosahedron)를 표현하는 데 사용되는 중심 다각형수(centered figurate number)의 일종입니다. 여기서 이십면체란 20개의 면을 가진 정다면체 도형을 의미합니다.n = 1000까지의 첫 번째 중심이십면체 수열은 다음과 같습니다.1, 13, 55,
값 n이 주어졌을 때, n번째 중심 구각수(centered nonagonal number)를 계산하고 n까지의 중심 구각수 수열을 생성한 뒤 그 결과를 출력하는 C++ 프로그램을 만들어 보겠습니다. 중심 구각수란? 중심 구각수는 하나의 중심점을 기준으로 점(dot)들이 구각형(9각형) 모양의 층을 이루며 겹겹이 쌓인 형태입니다. 가운데 점 하나를 두고 그 주위로 구각형 테두리가 차례대로 둘러싸인 도형에서 점의 총 개수가 바로 중심 구각수가 됩니다. 위 그림은 두 번째 중심 구각수 N2를 나타낸 것입니다. 중심 구각수는 다음 공식으
문제 개요문자열 str이 주어졌을 때, 이 문자열을 행렬 위에 + 패턴 형태로 출력해야 합니다. 행렬에 플러스 패턴을 만들려면 해당 행렬은 반드시 정사각 행렬이어야 하며, 정사각 행렬이란 행과 열의 개수가 같은 행렬을 의미합니다.예를 들어 문자열 Tutor가 주어진 경우, 문자열이 중앙에서 가로 방향과 세로 방향으로 서로 교차하도록 배치하고, 행렬의 나머지 칸은 아래 그림과 같이 모두 x로 채우는 것이 목표입니다.입력str[] = {Point}출력입력str[] = {this}출력Pattern not possible짝수 길이 문자열이
숫자 N이 주어졌을 때, 처음 N개의 팩토리얼(계승)을 모두 곱한 값을 1,000,000,007(109 + 7)로 나눈 나머지를 구하는 것이 이 문제의 목표입니다.여기서 팩토리얼이란 어떤 수부터 1까지의 모든 자연수를 곱한 것을 의미하며, 느낌표(!) 기호로 표현합니다. 예를 들어 다음과 같습니다.4! = 4 × 3 × 2 × 1 = 24즉, 우리는 1!부터 n!까지를 모두 곱한 뒤, 그 결과를 109 + 7로 나눈 나머지를 구해야 합니다.제약 조건1 ≤ N ≤ 106입력 예시 1n = 9출력 예시 127설명1! × 2! × 3!
약수의 곱이란? 숫자 n이 주어졌을 때, n의 모든 약수를 찾아 그 약수들을 모두 곱한 결과를 반환하는 것이 이 문제의 목표입니다. 즉, 어떤 수의 약수들의 곱을 구하는 것입니다. 여기서 약수란 1을 포함하여 해당 숫자를 나머지 없이 완전히 나눌 수 있는 수를 의미합니다. 예를 들어 6의 약수는 1, 2, 3, 6입니다. 주어진 과제에 따라 숫자의 모든 약수의 곱을 구해야 합니다. 입력 − n = 18 출력 − 5832 설명 − 1 × 2 × 3 × 6 × 9 × 18 = 5832 입력 − n = 9 출력 − 27 설명 − 1 ×
문제 소개정수 배열 arr[]가 주어졌을 때, 배열에 포함된 모든 소수의 곱을 구하는 것이 이번 문제의 목표입니다.소수(素數)란 1과 자기 자신으로만 나누어 떨어지는 수, 즉 그 외의 어떤 수로도 나누어지지 않는 수를 의미합니다. 대표적인 소수로는 2, 3, 5, 7, 11 등이 있습니다. 참고로 1은 1과 자기 자신이 같은 수이므로 소수에 포함되지 않습니다.주어진 배열에 대해 아래와 같은 결과를 얻어야 합니다.입력 − arr[] = { 11, 20, 31, 4, 5, 6, 70 }출력 − 1705설명 − 배열 속 소수는 11, 3
C++ 프로그램의 비정상적인 동작은 종종 프로그램 전체의 충돌(crash)로 이어집니다. 개발을 하다 보면 Segmentation fault, Aborted, Floating point exception 같은 오류 메시지를 한 번쯤은 마주하게 됩니다. 이 글에서는 실제 예제 코드와 함께 C++ 프로그램이 충돌하는 대표적인 원인들을 하나씩 살펴보고, 각 상황에 대한 예방 방법까지 정리해 드립니다. 1. 처리되지 않은 예외(Exception) C++에서 예외(exception)란 프로그램이 비정상적인 상황을 만났을 때 나타나는 반응을
문제 개요양의 정수 N이 주어졌을 때, 부등식 x2 + y2 < N을 만족하는 음이 아닌 정수 쌍(x, y)의 개수를 구하는 것이 목표입니다.해결 방법은 간단합니다. x를 0부터 x2 < N을 만족하는 범위까지, y를 0부터 y2 < N을 만족하는 범위까지 순회하면서 각 조합마다 x2 + y2 < N을 만족하는지 확인하고, 만족한다면 쌍의 개수를 하나씩 증가시키면 됩니다.예제입력: n = 4출력: 고유한 쌍의 개수 = 4설명: (0,0), (1,1), (0,1), (1,0) 네 쌍이 모두 x2 + y2 <
이 문제에서는 문자열 str이 주어지며, 해당 문자열에 포함된 모든 고유한(distinct) 부분 문자열의 개수를 구해야 합니다. 부분 문자열(substring)이란 기존 문자열의 연속된 일부분으로, 그 길이는 원본 문자열보다 작거나 같을 수 있습니다.예시를 통해 문제와 해결 방법을 자세히 살펴보겠습니다.문제 예시입력 − str = wxyz출력 − 고유한 부분 문자열의 개수: 10설명 − 다음과 같은 고유한 부분 문자열들이 존재합니다.wxyz, wxy, wx, w, xyz, xy, x, yz, y, z → 총 10개입력 − str
이 문제에서는 정수 n개로 이루어진 집합 arr[n]이 주어지며, 이 집합에 추가할 수 있는 최대 차이 요소의 개수를 구하는 것이 목표입니다. 여기서 차이란 |a-b| 형태를 의미하며, a와 b는 모두 집합에 속한 원소여야 합니다. 즉, 집합 내 원소들로 만들 수 있는 서로 다른 차잇값들을 계속 집합에 추가한다고 할 때, 최종적으로 몇 개의 새로운 요소를 더 넣을 수 있는지 세는 문제입니다. 예제를 통해 문제와 해결 방법을 자세히 살펴보겠습니다.입력 − set = {1, 5}출력 − 집합에 추가할 수 있는 최대 차이 요소의 개수:
이 문제의 목표는 최대 M개의 제품을 판매하여 얻을 수 있는 최대 수익을 계산하는 것입니다.전체 제품의 개수는 N개이며, 각 제품의 원가(Cost Price)와 판매가(Selling Price)는 각각 CP[]와 SP[] 배열에 주어집니다.입력 예시 1N=6, M=4 CP[]={1,9,5,8,2,11} SP[]={1,15,10,16,5,20}출력:28설명: 각 제품을 판매했을 때 얻는 수익은 순서대로 0, 6, 5, 8, 3, 9입니다.따라서 단 4개의 제품만 판매하여 최대 수익을 내려면 수익이 가장 높은 제품, 즉 2번, 3번,
N자리 숫자가 주어지고, 0부터 9까지 각 자릿수에 대한 대체 값을 담고 있는 배열이 함께 제공됩니다. 이때 연속된 하나의 구간만 딱 한 번 대체할 수 있다는 조건 하에서, 주어진 수를 최대한 크게 만드는 것이 이 문제의 목표입니다.예제 입력 및 출력예제 1입력N=1234, arr[]={3, 0, 1, 5, 7, 7, 8, 2, 9, 4}출력1257설명숫자 3은 대체 값 5(arr[3])로 교체됩니다.숫자 4는 대체 값 7(arr[4])로 교체됩니다.두 자릿수는 서로 인접해 있으므로, 단 한 번의 구간 대체만으로 1234를 1257
이 문제의 목표는 주어진 수 N에 대해 네 개의 인수 A, B, C, D를 찾아 그 곱이 최대가 되도록 하는 것입니다. 단, 다음 조건을 만족해야 합니다.네 인수의 합은 반드시 N과 같아야 합니다. 즉, N = A + B + C + D예제로 이해하기입력 − N = 10출력 − 20설명 − 10의 인수는 1, 2, 5, 10입니다. 이 중 5 × 2 × 2 × 1 = 20으로 곱이 최대가 되며, 동시에 5 + 2 + 2 + 1 = 10이라는 조건도 만족합니다.입력 − N = 16출력 − 256설명 − 16의 인수는 1, 2, 4, 8
N개의 정수로 이루어진 배열 arr[]와 정수 K가 주어졌을 때, 두 원소의 합 arr[i] + arr[j]가 K로 나누어 떨어지는 쌍의 최대 개수를 구하는 것이 이번 문제의 목표입니다.단, 한 번 쌍에 사용된 인덱스는 다른 쌍에서 다시 사용할 수 없다는 조건이 있습니다.입력 및 출력 예시예시 1입력arr[] = {1, 2, 5, 8, 3}, K = 2출력2설명 — 조건을 만족하는 쌍은 (0, 2)와 (1, 3)입니다. 즉, 1+5=6과 2+8=10이며, 두 값 모두 2로 나누어 떨어집니다.(0, 4), (1, 3) 또는 (2, 4
이 문제는 배열 arr[]을 K개의 연속된 부분 배열로 나눈 뒤, 각 부분 배열의 최솟값들 가운데 최댓값이 가장 커지도록 만들 때 그 값이 얼마가 될 수 있는지 구하는 것입니다. 문제 예시 입력 arr[] = {2, 8, 4, 3, 9, 1, 5}, K = 3 출력 9 설명 − 배열을 3개의 연속 부분 배열로 나누면 {2, 8, 4, 3}, {9}, {1, 5}가 됩니다. 각 부분 배열의 최솟값은 차례대로 2, 9, 1입니다. 이 세 값 중 최댓값은 9입니다. 입력 arr[] = {8, 4, 1, 9, 11}, K = 1 출력
n x n 크기의 행렬이 주어졌을 때, A[i][j] = 0인 원소를 찾아 해당 인덱스 (i, j) 사이의 차이가 가장 큰 값을 계산하는 것이 이번 문제의 목표입니다. 즉, 행렬에 포함된 0의 위치를 모두 확인한 뒤, 각 위치에서 행 인덱스 i와 열 인덱스 j의 차이(절댓값) 중 최댓값을 구하면 됩니다. 단, 이 문제에서는 행렬에 반드시 하나 이상의 0이 존재한다고 가정합니다.문제 예시입력int matrix[][] = { {0, 1, 1}, {0, 0, 0}, {
크기가 N으로 같은 두 개의 배열이 주어졌을 때, 첫 번째 배열에서 X개의 요소를, 두 번째 배열에서 Y개의 요소를 선택하여 얻을 수 있는 최대 합을 구하는 것이 이 문제의 목표입니다.문제 이해하기예시를 통해 문제를 자세히 살펴보겠습니다.입력arr1 = {1,2,3,4,5} ; X=2arr2 = {1,3,5,2,7} ; Y=3출력최대 합 : 24설명 − arr1에서는 2개, arr2에서는 3개의 숫자를 선택합니다. arr1에서 가장 큰 두 수는 4와 5이고, arr2에서 가장 큰 세 수는 3, 5, 7입니다. 이 다섯 개 요소의 총
문제 개요이 문제의 목표는 숫자 A의 일부 자릿수를 다른 숫자 B에 포함된 자릿수로 교체하여 A의 값을 최대화하는 것입니다. 만약 A의 값을 더 이상 높일 수 없다면 어떤 자릿수도 교체하지 않습니다.참고: B의 각 자릿수는 한 번만 사용할 수 있습니다.예제를 통해 문제를 구체적으로 살펴보겠습니다.입력A = 1221B = 1211출력A의 가능한 최댓값: 2221설명: 여기서는 B에서 2를 선택해 A의 첫 번째 자리에 있는 1과 교체했습니다. A의 다른 자릿수를 2나 1로 바꾸더라도 값이 증가하지 않으므로 이것이 유일한 선택입니다.입력
직육면체의 세 변(길이, 너비, 높이)의 합이 주어져 있을 때, 이 합을 이용해 직육면체의 최대 부피를 구하는 문제를 살펴보겠습니다. 직육면체는 길이(Length), 너비(Breadth), 높이(Height)의 세 변을 가지며, 부피는 세 변의 곱으로 계산됩니다.직육면체의 부피 = 길이 × 너비 × 높이핵심 아이디어는 간단합니다. 세 변의 값이 서로 최대한 가까울수록 부피가 커집니다. 이는 산술-기하 평균 부등식(AM-GM 부등식)에 따라 합이 고정되어 있을 때 곱은 각 값이 동일할 때 최대가 되기 때문입니다.문제 이해하기변의 합