이 문제에서는 주어진 급수에 해당하는 두 값 x와 n이 입력으로 제공됩니다. 우리의 과제는 C++를 사용하여 1 + x/2! + x²/3! + … + xⁿ/(n+1)! 의 합을 구하는 프로그램을 작성하는 것입니다. 문제 설명 − 주어진 x와 n 값을 기반으로 급수의 합을 계산해야 합니다. 이 급수에서 i번째 항은 바로 앞 항에 x/i를 곱한 값이 됩니다. 즉, 각 항은 팩토리얼 분모를 가지며 이전 항에서 규칙적으로 파생됩니다. 예제를 통해 문제를 자세히 이해해 보겠습니다. 입력 x = 6, n = 4 출력 29.8 설명
이 문제에서는 두 개의 숫자 a와 n이 주어지며, 우리의 과제는 C++에서 급수 a^1/1! + a^2/2! + a^3/3! + a^4/4! + …… + a^n/n!의 합을 구하는 프로그램을 작성하는 것입니다.문제 설명주어진 a와 n의 값을 이용해 해당 급수의 합을 구하는 것이 목표입니다. 이 급수는 특수한 형태의 급수로, 각 항은 바로 앞 항에 a/i(i는 1부터 n까지)를 곱한 값과 같습니다.예시를 통한 문제 이해입력a = 3, n = 4출력15.375설명급수의 합은 다음과 같이 계산됩니다.(3^1)/1! + (3^2)/2! +
문제 개요이 문제에서는 n개의 정수로 이루어진 배열 arr[]가 주어집니다. 우리의 목표는 C++에서 주어진 배열의 모든 요소의 합을 계산하는 프로그램을 작성하는 것입니다.프로그램 설명 — 주어진 배열의 모든 요소를 순서대로 더한 뒤, 그 결과값(합계)을 반환합니다.예시로 문제 이해하기입력arr[] = {3, 1, 7, 2, 9, 10}출력32설명합 = 3 + 1 + 7 + 2 + 9 + 10 = 32해결 접근 방법배열 요소의 합을 구하려면 배열을 처음부터 끝까지 순회하면서 각 요소를 하나씩 꺼내 sumVal 변수에 누적하면 됩니다
이 튜토리얼에서는 처음 n개의 자연수의 합을 구하는 C++ 프로그램을 다뤄보겠습니다.정수 n이 입력으로 주어지면, 1부터 n까지의 모든 자연수를 더한 합계를 계산하여 출력하는 것이 우리의 과제입니다.반복문을 이용한 풀이가장 기본적인 방법은 1부터 n까지 차례대로 반복하면서 값을 누적하는 것입니다. 아래 예제 코드를 살펴보세요.예제 코드#include<iostream> using namespace std; // 처음 n개의 자연수의 합을 반환하는 함수 int findSum(int n) { int sum = 0;
이 문제에서는 두 개의 정수 n과 k가 주어지며, C++로 해당 수열의 합을 구하는 프로그램을 작성하는 것이 목표입니다.수열은 다음과 같습니다.(1×2×3×…×k) + (2×3×4×…×(k+1)) + (3×4×5×…×(k+2)) + … + ((n−k+1)×(n−k+2)×…×n)문제 설명 − 주어진 k값을 기준으로 n번째 항까지 수열의 각 항을 계산하고, 그 합을 구합니다.예시를 통해 문제를 이해해 보겠습니다.입력n = 4, k = 3출력30설명수열: (1×2×3) + (2×3×4) = 6 + 24 = 30풀이 접근 방식가장 간단한
이 문제에서는 세 개의 값 a, d, n이 주어지며, C++로 조화급수의 합을 구하는 프로그램을 작성해야 합니다. 조화급수(HP)는 각 항의 역수가 등차수열을 이루는 수열입니다. 즉, 조화급수 A1, A2, A3, ..., An이 존재한다면, 그 역수들인 1/A1, 1/A2, 1/A3, ...은 등차수열(AP)이 됩니다. 따라서 일반적인 조화급수는 다음과 같은 형태입니다. 1/a, 1/(a+d), 1/(a+2d), …, 1/(a+nd) 여기서 1/a는 첫째 항이며, d는 역수로 변환된 등차수열의 공차(common difference
문제 개요 이 문제에서는 하나의 수 n이 주어지며, 우리의 목표는 C++를 이용해 1부터 n 사이에 있는 모든 소수의 합을 구하는 프로그램을 작성하는 것입니다. 소수(Prime Number)란 약수가 정확히 두 개뿐인 수, 즉 1과 자기 자신만을 약수로 가지는 수를 의미합니다. 예를 들어 2, 3, 5, 7, 11, 13 등이 대표적인 소수입니다. 문제 이해를 위한 예시 입력 n = 15 출력 41 설명 1부터 15 사이의 소수는 2, 3, 5, 7, 11, 13이며, 이들의 합은 2 + 3 + 5 + 7 + 11 + 13 = 4
이 문제에서는 하나의 숫자 n이 주어지며, 우리의 과제는 C++에서 급수 1 + 1/2 + 1/3 + 1/4 + ... + 1/n의 합을 구하는 프로그램을 작성하는 것입니다. 문제 개요 여기서 우리는 n번째 항까지의 급수 1 + 1/2 + 1/3 + 1/4 + ... + 1/n의 합을 구해야 합니다. 이 급수는 바로 조화급수(Harmonic Progression)입니다. 조화급수란 각 항의 역수가 등차수열을 이루는 급수를 말합니다. 즉, 조화급수 A1, A2, A3, ..., An이 존재한다면, 그 역수인 1/A1, 1/A2, 1/
이 문제에서는 수열의 n번째 항을 나타내는 숫자 n이 주어집니다. 우리의 과제는 C++로 수열 1 + 2 + 2 + 3 + 3 + 3 + ... + n의 합을 구하는 프로그램을 작성하는 것입니다.문제 설명이 수열은 각 숫자 n이 자신과 같은 횟수만큼 반복되어 더해지는 형태입니다. 즉, 이는 제곱수들의 합으로 표현되는 수열입니다.예시로 문제 이해하기입력n = 4출력30설명4번째 항까지의 수열의 합 = 1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 = 30해결 방법 1: 중첩 반복문 사용 (단순한 방법)가장 직관적
이 문제에서는 급수의 마지막 항을 결정하는 숫자 n이 주어집니다. 우리의 목표는 C++로 급수 1×2×3 + 2×3×4 + 3×4×5 + ... + n(n+1)(n+2)의 합을 구하는 프로그램을 작성하는 것입니다. 문제 설명 주어진 급수는 각 항이 연속된 세 개의 자연수 곱으로 이루어져 있습니다. 즉, k번째 항은 k×(k+1)×(k+2)이며, 첫 번째 항부터 n번째 항까지의 전체 합을 계산해야 합니다. 이를 수식으로 표현하면 Σ k(k+1)(k+2) (k=1부터 n까지)의 형태가 됩니다. 예시로 이해하기 입력: n = 5 출력:
이 문제에서는 등차수열(AP)의 공차인 값 d가 주어집니다. 이 등차수열은 사변형의 네 내각 전체를 나타내며, 우리의 목표는 C++로 사변형의 각도를 구하는 프로그램을 작성하는 것입니다. 문제 설명 사변형의 네 각도가 공차 d를 가지는 등차수열 형태로 주어질 때, 각각의 각도를 계산해야 합니다. 예시로 문제 이해하기 입력 d = 15 출력 67.5, 82.5, 97.5, 112.5 설명 첫 번째 각: x 두 번째 각: x + 15 세 번째 각: x + 30 네 번째 각: x + 45 사변형의 내각의 합은 항상 360도입니다. 이를
문제 개요0부터 9 사이의 숫자로 이루어진 길이 m과 n의 두 배열이 주어집니다. 두 배열에 포함된 숫자들을 조합하여 길이가 k인 가능한 한 가장 큰 수를 만들어야 하며, 이때 각 배열 내 숫자들의 상대적인 순서는 반드시 유지되어야 합니다.예를 들어, 입력이 [3,4,7,5]와 [9,1,3,5,8,4]이고 k = 5라면, 정답은 [9,8,7,5,4]가 됩니다.해결 전략이 문제는 세 가지 핵심 함수로 나누어 해결할 수 있습니다.modify(): 스택을 활용해 하나의 배열에서 i개의 숫자를 선택했을 때 만들 수 있는 최대 부분 수열을
문제 소개 정수 배열 nums가 주어졌다고 가정해 봅시다. 우리가 구해야 할 것은 [lower, upper] 범위(양쪽 경계 포함)에 속하는 구간 합(range sum)의 개수입니다. 여기서 구간 합 S(i, j)는 인덱스 i부터 j까지(i ≤ j)에 해당하는 요소들의 합으로 정의됩니다. 예를 들어 입력 배열이 [-3, 6, -1]이고 lower = -2, upper = 2라고 해 보겠습니다. 이때 조건을 만족하는 구간은 [0, 2](합 = 2)와 [2, 2](합 = -2) 두 가지이므로 결과값은 2가 됩니다. 접근 방법 이 문제
문제 개요 높이와 너비가 한 쌍으로 주어진 여러 개의 봉투가 있다고 가정해 보겠습니다. 어떤 봉투를 다른 봉투 안에 넣으려면, 안에 들어갈 봉투의 높이와 너비가 모두 바깥쪽 봉투보다 작아야 합니다. 이 조건을 만족하면서 서로 중첩할 수 있는 봉투의 최대 개수는 얼마일까요? 예를 들어 입력이 [[5,5], [6,4], [6,8], [2,3]]이라면 정답은 3입니다. 가장 작은 봉투인 [2,3]부터 시작하여 [5,5], 그리고 [6,8] 순서로 차례대로 넣을 수 있기 때문입니다. 해결 접근 방식 이 문제는 최장 증가 부분 수열(LIS
문제 개요 2차원 행렬(matrix)과 정수 k가 주어졌을 때, 행렬 안에서 임의의 직사각형 영역을 골라 그 합이 k보다 크지 않은 경우 중 가장 큰 값을 찾는 것이 이번 글의 목표입니다. 예를 들어 다음과 같은 행렬이 주어지고 k = 3이라고 가정해 보겠습니다. 1010-32 초록색으로 표시된 두 칸(각 행의 마지막 열)의 합은 1 + 2 = 3이므로, 정답은 3이 됩니다. 접근 방법 이 문제는 열 구간 고정 → 행별 누적 합(prefix sum) → set을 이용한 이진 탐색의 순서로 효율적으로 해결할 수 있습니다. 핵심 아이
문제 개요이번 글에서는 모든 연산이 O(1) 시간 안에 수행되어야 하는 자료구조를 설계해 보겠습니다. 이 자료구조는 다음 세 가지 연산을 지원해야 합니다.insert(x): 컬렉션에 x를 삽입합니다.remove(x): 컬렉션에서 x를 삭제합니다.getRandom(): 컬렉션에 있는 원소 중 하나를 무작위로 반환합니다.중복 허용 버전이므로 같은 값이 여러 번 삽입될 수 있으며, 각 값은 동일한 확률로 랜덤 선택되어야 합니다.핵심 아이디어: 동적 배열 + 해시 맵 조합이 문제를 효율적으로 풀기 위해서는 두 가지 자료구조를 함께 사용합니
문제 소개개구리 한 마리가 강을 건너는 상황을 생각해 봅시다. 강은 x개의 단위 구간으로 나뉘어 있으며, 각 단위 위치에는 돌이 있을 수도 있고 없을 수도 있습니다. 개구리는 돌 위에는 착지할 수 있지만 물 위에는 착지할 수 없습니다. 돌들의 위치가 오름차순으로 정렬된 배열로 주어졌을 때, 개구리가 마지막 돌에 착지하여 강을 건널 수 있는지 판별해야 합니다. 처음에 개구리는 첫 번째 돌 위에 서 있으며, 첫 번째 점프는 반드시 1단위여야 한다는 조건이 주어집니다.점프 규칙개구리의 직전 점프 거리가 k단위였다면, 다음 점프 거리는 k
문제 소개양의 정수로 이루어진 배열과 하나의 값 m이 주어졌다고 가정해 봅시다. 우리는 이 배열을 m개의 연속된 부분 배열로 나눌 수 있으며, 나눠진 부분 배열들 중 가장 큰 합이 최소가 되도록 만드는 알고리즘을 설계해야 합니다.예를 들어 배열이 [7, 2, 4, 10, 9]이고 m = 2라고 가정해 보겠습니다. 이 경우 배열을 [7, 2, 4](합 13)와 [10, 9](합 19)의 두 부분 배열로 나눌 수 있으며, 이때 가장 큰 합을 가지는 부분 배열의 합은 19입니다. 어떤 방식으로 나누더라도 이 값보다 작아질 수 없으므로 정
문제 개요두 정수 n과 k가 주어졌을 때, 1부터 n까지의 범위에 있는 숫자들을 사전순(lexicographical order)으로 나열했을 때 k번째로 작은 정수를 찾아야 합니다.예를 들어 n = 14, k = 3이 입력으로 주어진다면, 숫자들을 사전순으로 정렬한 결과는 [1, 10, 11, 12, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9]와 같습니다. 따라서 세 번째 숫자인 11이 출력됩니다.접근 방법사전순 정렬에서 숫자들은 마치 10진 트리(denary tree)처럼 배치됩니다. 즉, 각 숫자는 자신 뒤에 0부터
문제 설명 N개의 숫자로 이루어진 배열 A가 있다고 가정해 봅시다. 배열 A의 하위 시퀀스 슬라이스(subsequence slice)란 (K0, K1, K2, …, Kn)과 같이 0 ≤ K0 < K1 < K2 < … < Kn < N을 만족하는 정수 인덱스의 나열을 의미합니다. 이때 수열 A[K0], A[K1], …, A[Kn]이 등차수열을 이룬다면, 즉 항의 개수가 최소 3개(n ≥ 2)라면 이 하위 시퀀스 슬라이스를 산술 슬라이스(arithmetic slice)라고 부릅니다. 따라서 우리가 구해야 하는