두 개의 정수 START와 END가 주어져 하나의 숫자 범위를 정의하고, 양수로만 이루어진 배열 Arr[]도 함께 제공됩니다. 목표는 [START, END] 범위 안에 있으면서 배열의 모든 요소로 나누어 떨어지는 숫자를 모두 찾아 그 개수를 구하는 것입니다.이 문제를 해결하는 대표적인 두 가지 방법을 살펴보겠습니다.예시로 이해하기입력START=1 END=20 Arr[]= { 2, 4, 8 }출력배열의 모든 요소로 나누어 떨어지는 숫자의 개수: 2설명범위 내에서 배열의 모든 요소(2, 4, 8)로 나누어 떨어지는 숫자는 8과 16입니
문제 개요숫자 N이 주어졌을 때, 1부터 N까지의 범위에서 X로는 나누어지지만 Y로는 나누어지지 않는 수의 개수를 구하는 것이 목표입니다.예제를 통해 자세히 살펴보겠습니다.입력N=20 X=5 Y=20출력Numbers from 1 to N divisible by X not Y: 2설명5와 15만 5로 나누어지면서 20으로는 나누어지지 않습니다.입력N=20 X=4 Y=7출력Numbers from 1 to N divisible by X not Y: 5설명4, 8, 12, 16, 20은 모두 4로 나누어지며 7로는 나누어지지 않습니다.접근
이 문제에서는 두 개의 숫자 START와 END가 주어져 하나의 숫자 범위를 정의합니다. 목표는 [START, END] 범위 안에 있는 숫자 중, 자기 자신의 0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수를 구하는 것입니다.해결 방법은 START부터 END까지 숫자를 하나씩 순회하면서, 각 숫자에 대해 while 반복문을 사용해 해당 숫자가 0이 아닌 모든 자릿수로 나누어 떨어지는지 검사하는 것입니다. 조건을 만족하면 카운트를 증가시킵니다.예제로 이해하기입력START=10 END=20출력0이 아닌 모든 자릿수로 나누어 떨어지
두 개의 정수 N과 D가 주어집니다. N은 탐색 범위 [1, N]을 정의하고, D는 기준이 되는 차이값입니다. 이 문제의 목표는 범위 [1, N] 안에서 (수 − 그 수의 자릿수 합) > D 조건을 만족하는 모든 수를 찾아 그 개수를 구하는 것입니다.해결 방법은 간단합니다. 1부터 N까지의 수를 하나씩 순회하면서, 각 수에 대해 while 루프로 자릿수 합을 계산한 뒤, 원래 수에서 자릿수 합을 뺀 값이 D보다 큰지 확인하면 됩니다.예제로 이해하기입력N=15, D=5출력조건을 만족하는 수의 개수: 6설명10, 11, 12, 1
두 개의 숫자 A와 B가 주어지고, 숫자의 범위를 정의하는 START와 END 값도 함께 제공됩니다. 여기서 A번째 타일에는 흰색 페인트가, B번째 타일에는 검은색 페인트가 칠해져 있다고 가정합니다. 만약 어떤 타일에 흰색과 검은색이 모두 칠해져 있다면 그 타일은 회색(grey)이 됩니다. 우리의 목표는 이러한 회색 타일의 총 개수를 구하는 것입니다.이 문제는 START부터 END까지의 숫자를 하나씩 순회하면서, 각 숫자가 A와 B 양쪽 모두의 배수인지 확인하는 방식으로 해결할 수 있습니다. 조건을 만족하면 카운트를 증가시키면 됩니
두 개의 숫자 START와 END가 주어져 하나의 숫자 범위를 정의합니다. 이 문제의 목표는 해당 범위 [START, END] 안에서 각 자릿수의 합이 주어진 값 Y와 같은 숫자가 모두 몇 개인지 찾는 것입니다.해결 방법은 간단합니다. START부터 END까지 숫자를 하나씩 순회하면서, 각 숫자에 대해 while 루프를 이용해 자릿수의 합을 계산하고, 그 합이 Y와 같다면 카운트를 1씩 증가시키면 됩니다.예제로 이해하기입력 예시 1START=10 END=20 Y=4출력 결과 1자릿수의 합이 Y와 같은 숫자의 개수: 1설명숫자 13은
문제 소개두 개의 숫자 START와 END가 주어져 하나의 숫자 범위를 정의합니다. 이 문제의 목표는 [START, END] 범위 내에서 다음 세 가지 조건을 모두 만족하는 숫자의 개수를 찾는 것입니다.숫자에 0인 자릿수가 하나도 없어야 합니다.모든 자릿수의 합이 주어진 값 N과 같아야 합니다.해당 숫자는 M으로 나누어떨어져야 합니다.이를 해결하기 위해 START부터 END까지의 숫자를 순회하면서, 각 숫자에 대해 while 루프를 사용해 자릿수의 합을 계산합니다(단, 모든 자릿수가 0이 아닌 경우에만). 계산된 자릿수 합이 N과
문제 개요정수로 이루어진 정렬된 배열이 주어졌을 때, 배열의 요소 중 주어진 값 K보다 작거나 같은 요소가 몇 개인지 세는 것이 이 글의 목표입니다. 단순히 처음부터 끝까지 확인하는 방법과, 배열이 정렬되어 있다는 특성을 활용한 이진 탐색 방법 두 가지를 살펴보겠습니다.입력 예시 1Arr[]= { 1, 2, 3, 14, 50, 69, 90 } K=12출력K 이하인 숫자의 개수: 3설명숫자 1, 2, 3이 12보다 작거나 같습니다.입력 예시 2Arr[]= { 12, 13, 13, 13, 14, 50, 54, 100 } K=14출력K
문제 개요 정수 S와 K가 주어졌을 때, 두 양수의 합이 S가 되고 비트 단위 XOR 연산 결과가 K가 되는 순서쌍(ordered pair)의 개수를 구하는 것이 목표입니다. 해결 방법은 간단합니다. i를 1부터 S-1까지, j를 i+1부터 S까지 증가시키며 가능한 모든 쌍을 탐색하고, 어떤 쌍 (i, j)가 i + j == S와 i ^ j == K 조건을 동시에 만족하면 카운트를 2씩 늘립니다. (i, j)와 (j, i)는 원소의 순서가 다르므로 서로 다른 순서쌍으로 각각 세어 주기 위함입니다. 입출력 예제 입력 S = 10,
하나의 수 N이 주어졌을 때, 두 양의 정수로 이루어진 순서쌍(ordered pair) 중에서 곱이 N보다 작은 쌍의 개수를 구하는 것이 목표입니다.가장 직관적인 방법은 i를 1부터 N 미만까지, j를 1부터 (i*j)가 N 미만일 때까지 반복하면서 조건을 만족할 때마다 카운트를 1씩 증가시키는 것입니다.예제를 통해 자세히 살펴보겠습니다.입력 예시 1N=4출력 결과 1곱이 N보다 작은 순서쌍의 개수: 5설명: 조건을 만족하는 쌍은 (1,1), (1,2), (1,3), (2,1), (3,1)로 총 5개입니다.입력 예시 2N=100출력
숫자 N이 하나 주어졌을 때, 두 양수의 세제곱 합이 N과 같아지는 순서쌍(ordered pair)의 개수를 찾는 것이 목표입니다. 다시 말해 방정식 a3 + b3 = N을 만족하는 모든 (a, b) 조합을 구하면 됩니다. 이때 a는 N의 세제곱근(∛N) 이하 범위에서 탐색하고, b는 (N − a3)의 세제곱근으로 계산할 수 있습니다. 예시 입력 N=35 출력 Count of pairs of (a,b) where a^3+b^3=N: 2 설명 가능한 순서쌍은 (2, 3)과 (3, 2)입니다. 23 + 33 = 8 + 27 = 35이
하나의 자연수 N이 주어졌을 때, 두 양의 정수의 제곱합이 N이 되는 순서쌍(ordered pair)의 개수를 구하는 것이 이 글의 목표입니다.다시 말해, 방정식 a2 + b2 = N을 만족하는 모든 (a, b) 조합을 찾는 문제입니다. 여기서 a는 √N 이하의 값만 살펴보면 충분하고, 각 a에 대해 b는 √(N − a2)로 계산할 수 있습니다.예시를 통해 자세히 이해해 보겠습니다.입력N = 100출력a^2+b^2=N을 만족하는 쌍 (a, b)의 개수: 2설명가능한 쌍은 (6, 8)과 (8, 6)입니다. 6^2 + 8^2 = 36
문제 소개변수 N, M, A, B가 주어졌을 때, 두 양의 정수로 이루어진 순서쌍 (i, j) 중에서 그 합 (i + j)이 A와 B로 모두 나누어지는 쌍의 개수를 구하는 것이 목표입니다. 이때 i와 j는 각각 1 ≤ i ≤ N, 1 ≤ j ≤ M의 범위를 가져야 합니다.가장 직관적인 풀이 방법은 i와 j에 대해 두 개의 반복문을 사용해 가능한 모든 쌍을 탐색하는 것입니다. 각 쌍마다 (i + j) % A == 0 && (i + j) % B == 0 조건을 검사하고, 조건을 만족하면 카운트를 1씩 증가시킵니다.구체적인 예제를 통해
두 개의 정수 배열 Arr1[]과 Arr2[], 그리고 목표 합 K가 주어졌을 때, 두 배열의 원소로 구성된 쌍 (Arr1[i], Arr2[j]) 가운데 Arr1[i] + Arr2[j] == K를 만족하는 고유한 쌍의 개수를 구하는 것이 목표입니다.가장 직관적인 방법은 두 개의 반복문으로 i와 j를 순회하면서 모든 조합을 확인하는 것입니다. 합이 K가 되고, 아직 unordered_map<int, int>에 등록되지 않은 쌍이라면 맵에 추가하고 카운트를 1 증가시킵니다. 이렇게 하면 같은 값을 가진 쌍이 여러 번 발견되더
이 문제에서는 세 개의 숫자 X, Y, N이 주어지며, N은 탐색 대상이 되는 범위 [1, N]을 정의합니다. 목표는 1부터 N 사이의 숫자 중에서 오직 X와 Y만을 원하는 횟수만큼 반복해 더하여 만들 수 있는 숫자가 총 몇 개인지 찾아내는 것입니다.예를 들어 X=2, Y=3이라고 가정해 보겠습니다. 숫자 6은 2를 세 번 더한 값(2+2+2)이 될 수도 있고, 3을 두 번 더한 값(3+3)이 될 수도 있습니다. 마찬가지로 7은 2를 두 번, 3을 한 번 더한 값(2+2+3)으로 표현할 수 있습니다.해결 방법은 의외로 단순합니다.
하나의 정수 N이 주어졌을 때, 목표는 1부터 N 사이(또는 N 미만)의 수 중 완전제곱수(perfect square)의 개수와 비제곱수(non-square)의 개수를 각각 구하는 것입니다.예를 들어 N=20이라면, 완전제곱수는 1, 4, 9, 16으로 총 4개이고, 나머지 16개는 모두 비제곱수입니다.단순 접근 방식(Naive Approach)가장 직관적인 방법은 1부터 N까지의 모든 수를 하나씩 탐색하면서 해당 수가 완전제곱수인지 확인하는 것입니다.어떤 수 i가 완전제곱수인지 판별하는 기준은 다음과 같습니다.floor(sqrt(
문자열 배열 str[]과 패턴 문자열 pat이 주어졌을 때, 배열의 요소 중 패턴 pat으로 끝나는 문자열의 개수를 구하는 것이 목표입니다.해결 방법은 간단합니다. 배열의 각 문자열을 순회하면서 뒤에서부터 문자를 하나씩 비교하고, 모두 일치하면 카운트를 증가시키면 됩니다.예제로 이해하기입력 1str[] = { kittens, hens, deers, dogs }, pat = ens출력 1주어진 패턴으로 끝나는 문자열 개수: 2설명: kittens과 hens가 ens로 끝납니다.입력 2str[] = { tickets, wickets,
두 개의 범위 변수 START와 END가 주어졌을 때, [START, END] 구간 안에 포함된 소수(Prime Number)의 개수를 구하는 것이 목표입니다.소수 판별은 간단합니다. 숫자 i에 대해 1과 i/2 사이에 있는 어떤 수로도 나누어떨어지지 않는다면 그 수는 소수입니다. 이 조건을 만족할 때마다 카운트를 증가시키면 됩니다.예제로 이해하기입력Start=1 End=20출력Primes in Ranges : 8설명1과 20 사이의 소수: 2, 3, 5, 7, 11, 13, 17, 19입력Start=100 End=200출력Prim
네 개의 배열 A[], B[], C[], D[]가 주어졌을 때, A[i] + B[j] + C[k] + D[l] = x를 만족하는 모든 쿼드러플(네 원소 조합)의 개수를 구하는 것이 목표입니다. 네 배열은 모두 동일한 개수의 원소 N개를 가지고 있습니다.가장 기본적인 방법은 각 배열을 한 번씩 순회하면서 A[i] + B[j] + C[k] + D[l] == x를 만족하는지 확인하고, 조건이 참이면 카운트를 증가시키는 것입니다.예제를 통해 자세히 이해해 보겠습니다.입력A[]={ 1,2,3}; B[]={ 2,3,2}; C[]={ 4,3,1
정수 N은 하나의 2차원 원에 적용된 절단 횟수를 나타내며, 각 절단은 원의 중심을 지나면서 원을 둘로 나눕니다. 목표는 N번의 절단이 끝난 후 원이 몇 개의 조각으로 나뉘는지 구하는 것입니다. 모든 절단이 중심을 지나는 경우에는 아래와 같은 간단한 공식으로 조각 수를 구할 수 있습니다. 조각 수 = 2 × 절단 횟수 예시로 이해하기 예시 1 입력: N = 1 출력: 원의 조각 수 = 2 설명: 절단 한 번이 원을 정확히 두 부분으로 나눕니다. 예시 2 입력: N = 3 출력: 원의 조각 수 = 6 설명: 세 번의 절단이 모두 중