이 문제에서는 n개의 숫자로 이루어진 집합 S가 주어지며, 각 부분집합의 마지막 원소와 첫 번째 원소의 차이를 모두 더한 값, 즉 부분집합 차이의 합계를 구하는 프로그램을 작성해야 합니다.계산 공식은 다음과 같습니다.sumSubsetDifference = Σ [last(s) - first(s)]여기서 s는 집합 S의 부분집합입니다.문제 이해를 위한 예제입력 −S = {1, 2, 9}, n = 3출력 − 24설명 − 모든 부분집합은 다음과 같습니다.{1}, last(s) - first(s) = 0{2}, last(s) - first(
문제 소개 이번 문제에서는 하나의 정수 N이 주어졌을 때, 1부터 N 사이에서 2 또는 7로 나누어 떨어지는 모든 자연수의 합을 구하는 것이 과제입니다. 예시를 통해 문제를 이해해 보겠습니다. 입력: N = 10 출력: 37 설명: 합계 = 2 + 4 + 6 + 7 + 8 + 10 = 37 10 이하에서 2의 배수는 2, 4, 6, 8, 10이고, 7의 배수는 7입니다. 이들을 모두 더하면 37이 됩니다. 문제 해결 접근 방식 이 문제의 핵심 아이디어는 포함-배제 원리(Inclusion-Exclusion Principle)입니다.
이 글에서는 배열 arr[]와 각각 값 m으로 이루어진 Q개의 쿼리가 주어졌을 때, 배열 안에서 m의 배수에 해당하는 원소의 개수를 구하는 프로그램을 C++로 작성하는 방법을 알아봅니다.문제 설명각 쿼리를 처리하려면 배열에서 m으로 나누어 떨어지는 모든 원소를 찾아 그 개수를 세면 됩니다.예시로 이해하기입력: arr[] = {4, 7, 3, 8, 12, 15}Q = 3, query[] = {2, 3, 5}출력: 3 3 1결과 해석쿼리 1: m = 2일 때, 배열에서 2의 배수는 4, 8, 12이므로 개수는 3입니다.쿼리 2: m =
이 문제에서는 배열 arr[]과 Q개의 쿼리가 주어지며, 각 쿼리는 다음 두 가지 유형 중 하나입니다.{1, L, R} − 범위 [L, R]에 속하는 배열 요소의 개수를 구합니다.{2, index, val} − index 위치의 요소를 val 값으로 갱신합니다.이 글에서는 C++를 사용하여 주어진 범위 내 값을 가진 배열 요소의 개수를 구하는 쿼리를 처리하는 프로그램을 작성하는 방법을 살펴보겠습니다.문제 이해를 위한 예시입력: arr[] = {1, 5, 2, 4, 2, 2, 3, 1, 3}Q = 3쿼리 = { {1, 4, 8}, {
이 문제에서는 두 값 L과 R로 이루어진 Q개의 쿼리가 주어집니다. 우리의 목표는 C++를 사용하여 주어진 범위 내에 존재하는 소수들 사이의 최대 차이를 구하는 프로그램을 작성하는 것입니다. 문제 설명 각 쿼리에는 두 개의 값 L과 R이 주어집니다. 우리는 주어진 범위 [L, R] 안에서 가장 큰 소수와 가장 작은 소수의 차이, 즉 최대 차이를 찾아야 합니다. 만약 범위 내에 소수가 하나도 존재하지 않는다면 0을 출력합니다. 예제로 문제 이해하기 입력 Q = 2 2 45 14 16 출력 41 0 설명 쿼리 1: 범위 [2,
문제 소개이 문제에서는 이진 배열 bin[]과 두 값 L, R로 이루어진 Q개의 쿼리가 주어집니다. 우리의 목표는 C++로 이진 배열의 부분 배열(subarray)에 대한 10진수 값을 구하는 쿼리를 처리하는 프로그램을 작성하는 것입니다.문제 설명 – 각 쿼리를 처리할 때마다 인덱스 L부터 R까지의 부분 배열, 즉 subarray[L...R]이 나타내는 이진수를 찾아 그 10진수 값을 출력해야 합니다.예제로 이해하기입력bin[] = {1, 1, 0, 0, 1, 0, 1, 0, 0, 0} Q = 2 2 5 0 6출력2 101설명쿼리
문제 이해하기 하나의 문자열과 Q개의 쿼리가 주어집니다. 각 쿼리는 두 개의 정수 l, r과 하나의 문자 ch로 구성되며, 각 쿼리마다 부분 문자열 내에서 해당 문자가 나타나는 빈도를 구하는 프로그램을 C++로 작성하는 것이 이 글의 목표입니다. 문제 설명: 매 쿼리마다 부분 문자열 str[l...r] 범위 안에서 문자 ch가 몇 번 등장하는지 그 빈도를 구해야 합니다. 먼저 예제를 통해 문제를 자세히 살펴보겠습니다. 입력 str = "tutorialspoint" Q = 2 0 6 t 5 13 i 출력 2 2 설명
이 문제에서는 크기가 n인 배열 arr[]와 Q개의 쿼리가 주어집니다. 각 쿼리는 두 개의 인덱스 l과 r로 이루어져 있으며, 목표는 각 쿼리에 대해 해당 범위의 부분 배열에 포함된 서로 다른(고유한) 요소의 개수를 구하는 프로그램을 C++로 작성하는 것입니다. 문제 설명 각 쿼리마다 arr[l]부터 arr[r]까지의 부분 배열 안에 있는 서로 다른 정수의 총 개수를 계산해야 합니다. 즉, 같은 값이 여러 번 나오더라도 한 번만 세면 됩니다. 예시로 이해하기 입력 arr[] = {5, 6, 1, 6, 5, 2, 1} Q = 2
이 문제에서는 크기가 n인 배열 arr[]와 하나 이상의 쿼리가 주어집니다. 각 쿼리는 두 값 (L, R)으로 구성되며, 우리의 과제는 부분 배열(subarray)에 포함된 서로 다른(distinct) 요소의 개수를 구하는 프로그램을 작성하는 것입니다.문제 설명주어진 쿼리에 대해 인덱스 (L-1)부터 (R-1)까지의 부분 배열 안에 존재하는 서로 다른 정수의 총 개수를 찾아야 합니다.예제로 이해하기입력arr[] = {4, 6, 1, 3, 1, 6, 5} query = {1, 4}출력4설명쿼리 1: L = 1, R = 4일 때, 인덱
이 글에서는 Q개의 쿼리가 주어지고, 각 쿼리마다 양의 정수 N이 제공될 때, N의 모든 약수 중에서 자릿수의 합이 홀수인 약수들을 골라 그 합을 구하는 프로그램을 C++로 작성하는 방법을 알아봅니다. 문제 설명 각 쿼리를 처리하려면 먼저 N의 모든 약수를 구해야 합니다. 그중 자릿수의 합이 홀수인 약수만 선택하여 모두 더한 뒤, 쿼리별로 최종 합을 반환하면 됩니다. 예제를 통해 문제를 살펴보겠습니다. 입력 Q = 2, queries = {15, 8} 출력 8 1 설명 쿼리 1: N = 15인 경우, 15의 약수는 1, 3,
이 문제에서는 비토닉(bitonic) 시퀀스와 Q개의 쿼리가 주어집니다. 각 쿼리에는 하나의 정수 x가 포함되어 있으며, 우리의 과제는 각 쿼리의 정수를 시퀀스에 삽입한 후 비토닉 시퀀스의 길이를 출력하는 것입니다. 모든 쿼리 처리가 끝나면 최종 비토닉 시퀀스를 출력해야 합니다.문제 설명여기서는 비토닉 시퀀스 하나가 주어지고, 시퀀스에 추가할 정수를 담은 Q개의 쿼리가 입력됩니다. 각 쿼리의 원소를 시퀀스에 추가하면서 비토닉 시퀀스의 길이를 반환하고, 모든 쿼리가 완료된 후에는 최종 비토닉 시퀀스를 출력합니다.비토닉 시퀀스란?비토닉
이 문제에서는 2차원 평면 위에 있는 n개의 점이 주어지며, 각 점의 좌표는 (x, y)입니다. 우리가 해결해야 할 과제는 여러 개의 쿼리를 처리하는 것입니다. 각 쿼리마다 정수 R이 주어지고, 원점을 중심으로 하며 반지름이 R인 원 내부에 포함되는 점의 개수를 구해야 합니다.문제 상세 설명각 쿼리에 대해 n개의 점 중에서 중심이 원점 (0, 0)이고 반지름이 R인 원의 내부(경계선 포함)에 있는 점의 총 개수를 찾아야 합니다.예시로 문제 이해하기입력n = 5 2 1 1 2 3 3 -1 0 -2 -2 쿼리 1: 2출력1설명 − 쿼리
이 문제에서는 크기가 n×m인 이진 행렬 bin[][]이 주어지며, 총 q개의 쿼리를 처리해야 합니다. 각 쿼리(x, y)에 대해 모든 원소의 값이 y(0 또는 1)로 동일한 크기 x×x 부분 행렬의 개수를 찾아야 합니다.문제 설명주어진 행렬 안에서 두 비트 값 중 하나(0 또는 1)만으로 이루어진, 즉 모든 원소가 같은 값을 갖는 특정 크기의 부분 행렬이 몇 개 있는지 세어야 하는 것이 핵심입니다.예제로 문제 이해하기입력n = 3 , m = 4 bin[][] = {{ 1, 1, 0, 1} { 1, 1, 1, 0} { 0, 1, 1
이 문제에서는 입력 문자열과 배열 arr[]가 주어지며, 우리의 과제는 문자열 내에서 배열에 포함된 모든 단어의 등장 위치를 찾아내는 것입니다. 이를 위해 패턴 검색을 위한 아호-코라식(Aho-Corasick) 알고리즘을 활용합니다.문자열과 패턴 검색은 프로그래밍에서 매우 중요한 주제입니다. 그리고 프로그래밍에서는 더 나은 알고리즘일수록 더 폭넓은 실용적 활용이 가능합니다. 아호-코라식 알고리즘은 문자열 검색을 손쉽게 만들어주는 매우 중요하고 강력한 알고리즘입니다. 일종의 사전 매칭(dictionary matching) 알고리즘으로
이 글에서는 숫자 N이 주어졌을 때 Alexander Bogomolny의 비정렬 순열 알고리즘(UnOrdered Permutation Algorithm)을 사용해 N의 모든 순열을 찾는 방법을 알아봅니다.순열(Permutation)이란?순열이란 집합에 속한 원소들을 고유한 순서로 배열하는 방법의 수를 의미합니다.예시 — {4, 9, 2}의 순열은 {4,9,2}, {4,2,9}, {9,4,2}, {9,2,4}, {2,4,9}, {2,9,4}로 총 6가지입니다. 원소가 3개일 때 순열의 개수는 3! = 6으로 계산할 수 있습니다.순열은
보간(Interpolation)은 이미 알고 있는 값들 사이에 존재하는 미지의 값을 추정하는 기법입니다. 즉, 이산적으로 주어진 데이터 포인트 집합의 범위 안에서 새로운 데이터 포인트를 만들어내는 과정을 말합니다.보간을 사용하는 대표적인 이유는 계산 비용을 줄일 수 있기 때문입니다. 특정 값을 계산하는 수식(함수)이 너무 복잡하거나 연산 비용이 크게 들 때, 우리는 보간을 활용하는 것을 선호합니다. 원래의 함수를 사용해 몇 개의 데이터 포인트만 직접 계산하고, 나머지 값들은 보간을 통해 추정하는 방식입니다. 물론 완벽하게 정확하지는
문제 개요이 문제에서는 문자열 배열 str[]이 주어지며, 배열에 포함된 모든 문자열의 점수(score)를 구하는 것이 목표입니다. 점수는 다음과 같이 정의됩니다.점수 = 문자열의 위치(순번) × 문자열을 구성하는 각 문자의 알파벳 값(a=1, b=2, …, z=26)의 합예시로 문제 이해하기입력str[] = {"Learn", "programming", "tutorials", "point"}풀이 과정"Learn"은 1번째 위치 →합계 = 12
이 문제에서는 하나의 연결 리스트(Linked List)가 주어지며, 우리가 해야 할 작업은 연결 리스트의 교대(홀수 번째) 노드들의 값 합계를 출력하는 것입니다.연결 리스트란?연결 리스트는 각 데이터 요소가 링크(pointer)를 통해 서로 연결된 선형 자료구조입니다. 배열과 달리 메모리상에 연속적으로 저장되지 않으며, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성됩니다.문제 이해하기이제 본격적으로 문제를 살펴보겠습니다. 여기서는 연결 리스트의 교대 노드, 즉 인덱스 0, 2, 4, 6, ... 위치에 있는 노드들의 값을
이 문제에서는 하나의 숫자 N이 주어지며, 2부터 N/2까지의 모든 진법으로 숫자 N을 표현했을 때 각 자릿수의 합을 구하는 프로그램을 작성하는 것이 목표입니다.즉, 숫자 N의 진법을 2부터 N/2까지 차례대로 바꿔가며 계산해야 합니다. 예를 들어 n = 9라면 적용되는 진법은 2, 3, 4이고, 각 진법으로 표현한 숫자의 모든 자릿수를 더한 값을 구해야 합니다.문제 이해를 위한 예시입력:N = 5출력:2설명:2부터 N/2(=2)까지의 진법은 2 하나뿐입니다.5를 2진법으로 표현하면 101이며, 자릿수의 합은 1 + 0 + 1 =
문제 설명이 문제에서는 두 개의 숫자 L과 R이 주어집니다. 그리고 arr[i] = i × (-1)^i 규칙을 따르는 배열 arr[]가 존재합니다. 우리의 목표는 이 배열에서 인덱스 L부터 R까지의 요소 합을 계산하는 프로그램을 작성하는 것입니다.다시 말해, 배열의 [L, R] 범위에 속한 요소들의 합을 구해야 합니다. 이 배열의 특징은 인덱스가 짝수일 때 값이 양수(i), 홀수일 때 값이 음수(-i)가 된다는 점입니다. 예를 들어 arr[1] = -1, arr[2] = 2, arr[3] = -3과 같습니다.예제로 문제 이해하기입력