문제 설명 주어진 숫자 n에서 작업은 주어진 n의 이진 표현에서 두 개의 즉각적인 1 사이의 최대 0을 찾는 것입니다. 이진 표현에 1이 2개 미만이면 -1을 반환합니다. 예시 입력 번호가 35이면 이진 표현은 -입니다. 00100011 위의 이진 표현에서 두 개의 즉각적인 1 사이에는 3개의 0이 있습니다. 따라서 답은 3입니다. 알고리즘 비트 시프트 연산자를 사용하여 이 문제를 해결할 수 있습니다. n의 이진 표현에서 두 개의 즉각적인 1의 위치를 찾고 이 위치의 차이를 최대화해야 합니다. 숫자가 0이거나 2의 거
문제 설명 n*n 차의 정사각형 행렬이 주어지면 행렬에서 최대값과 최소값을 찾습니다. 예시 주어진 행렬이 -인 경우 {{15, 17, 19}, {5, 1, 7}, {14, 5, 16}} then Minimum number is 1 and maximum number is 19 알고리즘 행렬의 시작 부분에서 행렬의 동일한 행 끝에서 다른 요소 하나를 행렬에서 선택 이를 비교하고 다음으로 더 작은 것을 행렬의 최소값과 비교하고 큰 값을 행렬의 최대값과 비교합니다. 두 요소에 대해 3개의 비교가 필요하므로 전체 행렬을 순회하려면 총
문제 설명 n개의 양수 요소의 배열이 제공됩니다. 배열에서 요소 쌍에 의해 생성된 최대 비트 AND 값을 찾아야 합니다. 예 입력 배열이 {10, 12, 15, 18}이면 비트 AND의 최대값은 12입니다. 알고리즘 단일 비트에 대한 비트 AND 연산의 결과는 두 비트가 모두 1일 때 최대입니다. 이 속성을 고려하면 - MSB에서 시작하여 설정된 값을 갖는 배열 요소가 최소 두 개 이상 있는지 확인합니다. 예인 경우 해당 MSB는 솔루션의 일부가 되고 결과에 추가됩니다. 그렇지 않으면 해당 비트를 폐기합니다. 마찬가지로, 비
문제 설명 사변형 a, b, c, d의 네 변이 주어졌을 때 주어진 변에서 가능한 사변형의 최대 넓이를 구하세요. 알고리즘 아래 Brahmagupta 공식을 사용하여 이 문제를 해결할 수 있습니다. − √(s-a)(s-b)(s-c)(s-d) 위의 공식에서 s는 반둘레입니다. 다음과 같이 계산됩니다 - S =(a + b + c + d) / 2 예시 이제 예를 살펴보겠습니다 - #include <bits/stdc++.h> using namespace std; double getMaxArea(double a, dou
문제 설명 동일한 크기의 배열 A[]와 B[]가 주어집니다. 작업은 동일한 크기의 세 번째 배열을 형성하는 것입니다. 결과 배열에는 두 배열의 최대 n개 요소가 있어야 합니다. A[]의 요소를 먼저 선택한 다음 B[]의 요소를 원래 배열에 나타나는 것과 동일한 순서로 선택해야 합니다. 공통 요소가 있는 경우 res[]에는 하나의 요소만 있어야 하며 A[]에 우선 순위를 부여해야 합니다. 예시 입력 배열이 -인 경우 arr1[] ={9, 17, 2, 25, 6}arr2[] ={17, 4, 8, 10, 1} 최종 배열은 다음과 같습
문제 설명 배열 arr[]와 두 개의 정수 X 및 Y가 주어집니다. 작업은 최대 평균을 갖는 최소 X 및 최대 Y 크기의 하위 배열을 찾는 것입니다. 예시 입력 배열이 {2, 10, 15, 7, 8, 4}이고 x =3이고 Y =3이면 다음과 같이 최대 평균 12.5를 얻을 수 있습니다. - (10 + 15) / 2 = 12.5 알고리즘 X부터 Y까지 크기의 모든 하위 배열을 반복하고 모든 하위 배열 중에서 최대 평균을 찾습니다. 시간 복잡성을 줄이기 위해 접두사 합계 배열을 사용하여 O(1) 복잡성의 하위 배열 합계를 얻을 수
문제 설명 주어진 배열에서 숫자 A의 행을 최대 K개의 인접한(비어 있지 않은) 그룹으로 분할한 다음 점수는 각 그룹의 평균 합계입니다. 채점할 수 있는 최대 점수는 얼마입니까? 예 입력 배열이 {9, 2, 5, 3, 10}이면 다음과 같이 배열을 분할할 수 있습니다. - {9} {2, 5, 3} 및 {10}의 평균 합계는 - 9 + (2 + 5 + 3)/ 3 + 10 =22.33 알고리즘 우리는 이 문제를 해결하기 위해 암기 기술을 사용할 수 있습니다 - 메모[i][k]를 A[i에서 n-1]까지의 최대 K 부분으로 나눈
문제 설명 범위 [L, R]이 주어지면 작업은 L ≤ X
문제 설명 양수 n을 주었고 0 또는 n의 조합으로 구성될 수 있고 최대 행렬식을 갖는 3*3 행렬을 찾아야 합니다. 예 n =15이면 다음과 같이 행렬을 만들 수 있습니다. - {{15, 15, 0}{0, 15, 15}{15, 0, 0}} 요소가 0 또는 n인 모든 3*3 행렬의 경우 가능한 최대 행렬식은 2 *(n)3입니다. . 따라서 대답은 - 2 * (15)3 =6750 알고리즘 요소가 0 또는 n인 모든 3*3 행렬의 경우 가능한 최대 행렬식은 2 *(n)3입니다. 예 이제 예를 살펴보겠습니다 - #includ
문제 설명 짝수 개의 꼭짓점이 있는 무방향 트리가 주어지면 결과 포리스트의 연결된 각 구성 요소가 짝수의 꼭짓점을 갖도록 이 트리에서 최대 가장자리 수를 제거해야 합니다. 예시 위에 표시된 트리에서 빨간색으로 표시된 최대 2개의 가장자리 0-2 및 0-4를 제거하여 연결된 각 구성 요소가 짝수의 정점을 갖도록 할 수 있습니다. 알고리즘 트리가 연결될 때 시작 노드에서 DFS 수행 현재 노드 아래에 있는 하위 트리의 노드 수를 0으로 초기화 현재 노드의 모든 하위 트리에 대해 재귀적으로 다음을 수행합니다. - 현재 하위 트리
문제 설명 N 요소의 배열과 주어진 배열에 속하는 두 개의 정수 A, B가 주어집니다. arr[0]에서 arr[n-1]까지 요소를 삽입하여 이진 검색 트리를 만듭니다. 작업은 A에서 B로의 경로에서 최대 요소를 찾는 것입니다. 예시 배열이 {24, 23, 15, 36, 19, 41, 25, 35}인 경우 다음과 같이 BST를 구성할 수 있습니다. - A =19 및 B =41을 고려하면 이 두 노드 사이의 최대 요소는 41입니다. 알고리즘 노드 A와 B의 최하위 공통 조상(LCA) 찾기 LCA와 A 사이의 최대 노드를 찾습
이 자습서에서는 Hut 패턴을 인쇄하는 프로그램에 대해 설명합니다. 이를 위해 인쇄할 오두막의 너비(예:N)가 제공됩니다. 우리의 임무는 별을 사용하여 주어진 너비의 오두막 구조를 인쇄하고 선 문자를 사용하여 오두막 내부의 게이트를 인쇄하는 것입니다. 예시 #include <iostream> using namespace std; //printing the given hut structure int print_hut(int n){ int i, j, t; if (
이 튜토리얼에서는 주어진 흥미로운 패턴을 인쇄하는 프로그램에 대해 논의할 것입니다. 이를 위해 패턴의 절반 너비가 제공됩니다. 우리의 임무는 왼쪽과 오른쪽 부분이 서로의 거울 이미지가 되도록 주어진 너비에 따라 유사한 패턴을 인쇄하는 것입니다. 예시 #include<stdio.h> //printing the given pattern void print_pattern(int n){ int i,j; //printing the upper half for (
이 튜토리얼에서는 주어진 역 다이아몬드 패턴을 인쇄하는 프로그램에 대해 논의할 것입니다. 이를 위해 N 값이 제공됩니다. 우리의 작업은 2N-1의 높이에 따라 역 다이아몬드 패턴을 인쇄하는 것입니다. 예시 #include<bits/stdc++.h> using namespace std; //printing the inverse diamond pattern void printDiamond(int n){ cout<<endl; int i, j = 0; &nb
이 튜토리얼에서는 주어진 연 패턴을 인쇄하는 프로그램에 대해 논의할 것입니다. 이를 위해 입력을 N=5로 사용합니다. 우리의 임무는 전체 높이가 2N+1 =5인 주어진 Kitestructure를 인쇄하는 것입니다. 여기에는 상부 다이아몬드 구조에 대한 9개의 라인과 하부 불완전 다이아몬드 구조에 대한 2개의 라인이 포함됩니다. 예 #include <bits/stdc++.h> #include <stdlib.h> using namespace std; int main(){ int i, j,
이 자습서에서는 마지막 10줄을 인쇄하는 프로그램에 대해 설명합니다. 이를 위해 다음 줄의 시작을 나타내는 새 줄 문자로 구성된 문자열이 제공됩니다. 우리의 임무는 마지막부터 시작하여 마지막부터 세어 10행을 모두 인쇄하는 것입니다. 예시 #include <bits/stdc++.h> using namespace std; #define DELIM '\n' //printing the last 10 lines void print_last_lines(char *str, int n){ if
이 튜토리얼에서는 마지막 N 줄을 인쇄하는 프로그램에 대해 설명합니다. 이를 위해 다음 줄의 시작을 나타내는 새 줄 문자와 마지막 줄부터 인쇄할 줄 수로 구성된 문자열이 제공됩니다. 우리의 임무는 마지막에서 시작하여 마지막에서 세어 모든 N 줄을 인쇄하는 것입니다. 예시 #include <bits/stdc++.h> using namespace std; #define DELIM '\n' //printing the last N lines void print_last_lines(char *str, int n){
이 튜토리얼에서는 이진 트리를 미러 트리로 변환하는 프로그램에 대해 설명합니다. 이를 위해 바이너리 트리가 제공됩니다. 우리의 임무는 주어진 이진 트리에서 미러 트리를 생성하는 왼쪽과 오른쪽 끝의 값을 바꾸는 것입니다. 예시 #include<bits/stdc++.h> using namespace std; //binary tree node structure struct Node{ int data; struct Node* left; struct Node*
이 튜토리얼에서는 모든 노드가 오른쪽 하위 트리에 모든 노드의 합계를 저장하도록 이진 트리를 변환하는 프로그램에 대해 설명합니다. 이를 위해 바이너리 트리가 제공됩니다. 우리의 임무는 모든 노드가 노드와 해당 하위 트리의 합과 같아야 하는 다른 트리를 반환하는 것입니다. 예 #include <bits/stdc++.h> using namespace std; //node structure of tree struct Node { int data; Node *left, *right;
이 자습서에서는 이진 트리를 순환 이중 연결 목록으로 변환하는 프로그램에 대해 설명합니다. 이를 위해 바이너리 트리가 제공됩니다. 우리의 작업은 왼쪽 및 오른쪽 노드를 각각 왼쪽 및 오른쪽 요소로 변환하는 것입니다. 그리고 이진 트리의 순서를 순환 연결 리스트의 순서로 취하십시오. 예시 #include<iostream> using namespace std; //node structure of the binary tree struct Node{ struct Node *left, *right; &nb