숫자로 이루어진 배열 Arr[]가 주어졌을 때, 세 원소의 곱이 가능한 모든 삼중항 중 최솟값과 일치하는 삼중항의 개수를 구하는 것이 목표입니다. 단, 인덱스 조건 i<j<k를 만족하면서 arr[i]*arr[j]*arr[k]가 최소가 되는 경우를 셉니다.해결 방법은 다음과 같습니다. 먼저 i<j<k 조건을 만족하는 가장 작은 곱을 찾아 minprod에 저장한 뒤, 곱이 minprod와 같은 모든 삼중항의 개수를 계산합니다.예시를 통한 이해입력 − arr[] = { 1,2,3,2,4,1,5 }출력 − 삼중항의 개
문제 개요 N개의 요소로 구성된 배열 Arr[]이 주어졌을 때, 서로 다른 인덱스(i ≠ j)를 가진 두 요소로 이루어진 모든 쌍 (Arr[i], Arr[j]) 중에서 그 합이 완전제곱수(perfect square)가 되는 쌍의 개수를 구하는 것이 목표입니다. 즉, Arr[i] + Arr[j]의 값이 어떤 정수의 제곱과 일치하는지 확인해야 합니다. 가장 직관적인 방법은 모든 쌍의 합을 계산한 뒤, 해당 값의 제곱근이 정수인지 검사하는 것입니다. 수식으로 표현하면 sqrt(Arr[i]+Arr[j]) − floor(sqrt(Arr[i]
N개의 요소를 가진 배열이 주어졌습니다. 목표는 곱이 2의 거듭제곱(2ᵏ, k≥0)이 되는 모든 쌍(Arr[i], Arr[j])의 개수를 구하는 것입니다. 단, i≠j여야 하며, 같은 쌍이 중복해서 세어지지 않도록 일반적으로 i<j인 조합만 확인합니다.이 문제는 각 쌍의 곱을 계산한 뒤, 해당 값이 2의 거듭제곱인지 판별하는 방식으로 해결할 수 있습니다. 가장 직관적인 판별 방법은 log₂를 활용하는 것입니다. 어떤 양수 x가 2의 거듭제곱일 때 log₂(x)는 항상 정수이므로, ceil(log₂(x))와 floor(log₂(
문제 개요 N개의 요소로 이루어진 배열 arr[]가 주어졌을 때, 특정 조건을 만족하는 모든 유효한 쌍 (Arr[i], Arr[j])의 개수를 구하는 것이 목표입니다. 쌍 (Arr[i], Arr[j])이 유효하려면 다음 세 가지 조건을 모두 만족해야 합니다. Arr[i] == Arr[j] : 두 요소의 값이 서로 같아야 합니다. Arr[i] + Arr[j]가 짝수 : 두 요소의 합이 짝수여야 합니다. i + j < 120 : 두 인덱스의 합이 120보다 작아야 합니다. 참고 – (Arr[i], Arr[j])와 (Arr[j]
문제 소개 숫자로 구성된 배열 Arr[]가 주어졌을 때, 가능한 모든 쌍 중에서 최대 차이(maxdiff)와 같은 차이를 가지는 쌍의 개수를 세는 것이 목표입니다. 이때 쌍은 (i != j) 조건을 만족해야 하며, 두 원소의 차이가 배열 전체에서 가장 커야 합니다. 풀이 과정은 다음과 같습니다. 먼저 (i != j) 조건에서 만들 수 있는 최대 차이를 구하여 maxdiff에 저장한 뒤, 차이가 maxdiff와 일치하는 모든 쌍의 개수를 세면 됩니다. 예제를 통해 자세히 살펴보겠습니다. 예제 1 입력 − arr[] = { 1, 2,
세 개의 배열 A[], B[], C[]가 주어졌을 때, A[i] < B[j] < C[k] 조건을 만족하는 모든 트리플렛(triplet, 세 쌍)의 개수를 구하는 것이 목표입니다. 세 배열은 모두 동일한 개수의 원소 N개를 가지고 있습니다.가장 기본적인 방법은 세 배열을 각각 한 번씩 순회하면서 A[i] < B[j] 이고 B[j] < C[k] 인지 비교하고, 조건이 참이면 카운트를 증가시키는 것입니다.예제를 통해 자세히 살펴보겠습니다.예제 1입력 −A[] = {1, 4, 5}, B[] = {0, 2, 3}, C[
문제 소개 정수 네 개 L, R, A, B가 주어집니다. 목표는 범위 [L, R]에 속한 수 중에서 A 또는 B(혹은 둘 다)로 나누어 떨어지는 수의 개수를 구하는 것입니다. 가장 단순한 방법은 L부터 R까지 차례대로 순회하면서 각 수를 확인하는 것입니다. 어떤 수 i를 A로 나눈 나머지가 0이거나(i % A == 0), B로 나눈 나머지가 0이라면(i % B == 0) 카운트를 1씩 증가시키면 됩니다. 예제를 통해 자세히 살펴보겠습니다. 예제 입력 − L=10, R=15, A=4, B=3 출력 − 조건을 만족하는 수의 개수: 2
서로 다른(distinct) 정수로 이루어진 정렬되지 않은 배열이 주어집니다. 목표는 배열을 정렬했을 때 발생하는 교차 선(cross line)의 개수를 구하는 것입니다. 교차 선은 아래 그림과 같이 계산됩니다.Arr[] = { 1, 2, 4, 3, 5 } → 아래 그림과 같이 교차 선이 3개 존재합니다.Arr[] = { 1, 2, 3, 4, 5 } → 이미 정렬된 상태이므로 교차 선이 하나도 없습니다.이 문제는 사실 역전(inversion) 쌍의 개수를 세는 문제와 본질적으로 같습니다. 값의 순서가 뒤바긴 원소 쌍만큼 선이 서로
길이가 n인 정수 배열 Arr[]가 주어졌을 때, 임의의 두 수의 합이 나머지 한 수와 같아지는 삼중항 (Arr[i], Arr[j], Arr[k])의 개수를 구하는 것이 이 문제의 목표입니다.조건식은 a + b = c 형태이며, 여기서 a, b, c는 배열 Arr[]의 요소이고 인덱스 i, j, k는 0 ≤ i < j < k < n을 만족해야 합니다.이 문제는 세 개의 for 반복문을 사용해 해결할 수 있습니다. arr[x] + arr[y] = arr[z]를 만족하면서 x ≠ y ≠ z인 경우 count 값을 증가시
세 개의 정수 A, B, M이 주어졌을 때, A와 B가 정의하는 범위 [A, B] 안에서 M으로 나누어 떨어지는 숫자가 몇 개 있는지 세는 것이 이 문제의 목표입니다. 가장 직관적인 방법은 i를 A부터 B까지 하나씩 증가시키면서, i % M == 0을 만족하는 경우마다 카운트를 늘리는 것입니다. 입력 및 출력 예시 예시 1 입력: A = 11, B = 20, M = 5 출력: 주어진 범위에서 M으로 나누어 떨어지는 숫자의 개수: 2 설명: 범위 [11, 20] 안에서 5로 나누어 떨어지는 숫자는 15와 20뿐입니다. 예시 2
C++에서 만들 수 있는 삼각형의 개수 구하기삼각형의 변 길이들이 담긴 배열이 주어졌을 때, 이 배열에서 임의의 세 변을 선택하여 만들 수 있는 삼각형의 개수를 구하는 것이 목표입니다.세 변이 삼각형을 이루려면 두 변의 길이 합이 항상 나머지 한 변보다 커야 한다는 삼각 부등식 조건을 활용합니다. 어떤 세 변이 이 조건을 만족하면 해당 조합으로 삼각형을 만들 수 있으므로, 가능한 삼각형의 개수를 하나씩 늘려 가며 계산합니다.예제를 통해 자세히 살펴보겠습니다.입력 − arr[] = {1,2,4,5}출력 − 만들 수 있는 삼각형의 개수
N개의 요소로 구성된 배열 arr[]가 주어졌을 때, arr[i]가 arr[j]로 나누어 떨어지거나 arr[j]가 arr[i]로 나누어 떨어지면서 i ≠ j를 만족하는 모든 유효한 인덱스 쌍(i, j)의 개수를 구하는 것이 목표입니다.이 문제는 두 개의 for 루프를 사용해 배열 arr[]를 순회하면서 각 쌍마다 i ≠ j일 때 arr[i] % arr[j] == 0 또는 arr[j] % arr[i] == 0인지 검사하는 방식으로 해결할 수 있습니다. 조건이 참이면 쌍의 개수를 1씩 증가시키면 됩니다.예제로 이해하기입력 − Arr[]
N×N 크기의 행렬이 주어졌을 때, j번째 열의 원소 합이 i번째 행의 원소 합보다 큰 모든 유효한 인덱스 쌍 (i, j)의 개수를 구하는 것이 목표입니다.이 문제는 행렬을 한 번씩 순회하면서 각 행과 열의 원소 합을 미리 계산해 둔 뒤, 가능한 모든 쌍을 비교하는 방식으로 해결할 수 있습니다.구체적인 절차는 다음과 같습니다.각 행의 원소 합은 rowsum[N] 배열에 저장합니다.각 열의 원소 합은 colsum[N] 배열에 저장합니다.rowsum[i]와 colsum[j]로 만들 수 있는 모든 쌍을 검사하여 colsum[j] >
양의 정수 K와 정수들을 담고 있는 배열 Ops[]가 주어집니다. 이 문제의 목표는 K에 특정 연산을 반복 적용하여 K가 0보다 작아질 때까지 필요한 연산 횟수를 구하는 것입니다. 연산 규칙은 다음과 같습니다.첫 번째 연산은 K + Ops[0]입니다. 즉, 배열의 첫 번째 요소를 K에 더합니다.그다음부터는 K < 0이 될 때까지 Ops[i]를 계속해서 K에 더합니다. 이때 인덱스 i는 순환(circular) 방식으로 진행됩니다. 즉, 0 ≤ i < N(N은 배열 Ops[]의 크기) 범위에서 i가 마지막 요소 Ops[N-1
이 글의 목표는 정적(static) 멤버 함수를 사용하여 클래스로부터 생성된 객체의 개수를 세는 것입니다.정적 데이터 멤버는 해당 클래스의 모든 객체가 공유하는 멤버입니다. 별도의 초기값이 지정되지 않으면 항상 0으로 초기화됩니다. 또한 정적 멤버 함수는 그 클래스의 정적 데이터 멤버만 사용할 수 있다는 특징이 있습니다.여기서는 Student 클래스를 예제로 사용합니다. 객체의 개수를 저장할 정적 데이터 멤버 count를 선언하고, 학생들의 출석 번호처럼 객체 수를 출력하는 정적 멤버 함수 rollCall(void)을 구현합니다.프
구간 [first, last]가 주어졌을 때, 이 구간 안에서 첫 번째 자릿수와 마지막 자릿수가 같은 숫자의 개수를 구하는 것이 목표입니다. 예를 들어 232는 첫 자릿수와 마지막 자릿수가 모두 2로 동일합니다.해결 방법은 간단합니다. i = first부터 i = last까지 차례대로 순회하면서, 각 숫자의 첫 자릿수와 마지막 자릿수를 비교하고, 두 값이 같다면 카운트를 증가시키면 됩니다.예제로 이해하기입력 − first = 8, last = 40출력 − 첫 자릿수와 마지막 자릿수가 같은 숫자의 개수 − 5설명 − 8부터 40 사이
n개의 양수로 이루어진 배열이 주어졌을 때, arr[x]와 arr[y]의 곱이 짝수 또는 홀수가 되는 순서쌍 (arr[x], arr[y])의 개수를 세는 것이 목표입니다. 이때 (arr[i], arr[j])와 (arr[j], arr[i])는 서로 다른 쌍으로 각각 계산합니다.두 개의 for 루프를 사용해 배열을 순회하며 가능한 모든 쌍을 확인합니다. 각 쌍의 곱을 계산한 뒤, 곱이 짝수라면 짝수 곱 쌍 카운트를 2씩 증가시키고, 홀수라면 홀수 곱 쌍 카운트를 2씩 증가시킵니다.예제를 통해 자세히 살펴보겠습니다.예제 1입력 − Arr
n개의 양의 정수로 이루어진 배열이 주어졌을 때, arr[x]와 arr[y]의 합이 짝수 또는 홀수가 되는 순서쌍 (arr[x], arr[y])의 개수를 구하는 것이 목표입니다. 이때 (arr[i], arr[j])와 (arr[j], arr[i])는 순서가 다르므로 서로 다른 순서쌍으로 계산합니다.풀이 방법은 간단합니다. 두 개의 for 루프를 사용해 배열을 순회하면서 각 순서쌍의 합을 구하고, 합이 짝수이면 짝수 합 카운트를 2씩 증가시키고, 홀수이면 홀수 합 카운트를 2씩 증가시킵니다. 2씩 증가시키는 이유는 (a, b)와 (b,
문제 개요n개의 양수로 구성된 배열이 주어집니다. 우리의 목표는 arr[i] * arr[j] > arr[i] + arr[j] 조건을 만족하는 순서쌍 (i, j)의 개수를 세는 것입니다. 단, 인덱스는 0 ≤ i < j < n을 만족해야 하며, 여기서 n은 배열에 포함된 원소의 개수입니다.가장 직관적인 방법은 두 개의 for 루프를 중첩하여 배열의 모든 가능한 쌍을 탐색하는 것입니다. 각 쌍에 대해 arr[i]와 arr[j]의 합과 곱을 계산한 뒤, 곱이 합보다 크면 카운트를 증가시킵니다.예시를 통해 자세히 살펴보겠습
문제 개요두 개의 정수 m과 n이 주어졌을 때, n으로 나누어 떨어지는 m자리 숫자가 몇 개인지 구하는 것이 이 글의 목표입니다.간단한 예로 m=1이라면 대상 숫자는 0부터 9까지이고, n=3일 때 3으로 나누어 떨어지는 수는 0, 3, 6, 9로 총 4개입니다.예제로 이해하기입력 — m=2, n=9출력 — n으로 나누어 떨어지는 m자리 수의 개수: 10설명 — 10부터 99 사이에서 9로 나누어 떨어지는 수는 다음과 같습니다.18, 27, 36, 45, 54, 63, 72, 81, 90, 99입력 — m=3, n=300출력 — n