r입니다. 또 다른 원이 있습니다. 반지름(r1)과 중심점이 주어지면 그 점이 처음 두 개의 원으로 형성된 고리 내부에 있는지 확인해야 합니다. =r 및 (distance – r1) <=R이면 둘 다 참이면 원이 링 안에 있습니다. 예 #include <iostream> #include <cmath> using namespace std; bool isInside(int r, int R, int r1, int x, int y) { int dis = sqrt(x*x+y*y);
문자열이 합 문자열인지 여부를 확인하는 방법을 살펴보겠습니다. 가장 오른쪽 부분 문자열이 앞에 있는 두 부분 문자열의 합으로 쓰여질 수 있는 경우 문자열을 합 문자열이라고 하며, 그 앞의 부분 문자열에 대해서도 재귀적으로 마찬가지입니다. 12243660과 같은 문자열이 12 + 24 =36과 같은 합계 문자열이고 36이 문자열에서 12와 24 뒤에 있고 다시 24 + 36 =60이 있다고 가정하고 이것도 문자열에 있습니다. 문자열 S는 다음 규칙을 따르는 경우 합계 문자열이라고 부를 수 있습니다. - 𝑠𝑢𝑏𝑠𝑡𝑟𝑖�
트리 그래프가 선형인지 아닌지 확인하는 방법을 알아보겠습니다. 선형 트리 그래프는 선형 트리 그래프의 예라고 가정해 한 줄로 표현할 수 있습니다. 그러나 이것은 선형이 아닙니다 - 그래프가 선형인지 아닌지 확인하기 위해 두 가지 조건을 따를 수 있습니다. 노드 수가 1이면 트리 그래프가 선형입니다. 만약 (n – 2) 노드의 차수가 2인 경우 예시 #include <iostream> #include <vector> #define N 4 using namespace std; class Graph{
그래프가 있다고 가정합니다. 그래프가 강하게 연결되어 있는지 여부를 Kosaraju 알고리즘을 사용하여 확인해야 합니다. 그래프는 강하게 연결되어 있다고 하며, 두 정점 사이에 경로가 있으면 그래프가 연결된 것입니다. 무방향 그래프는 강하게 연결된 그래프입니다. 일부 무방향 그래프는 연결될 수 있지만 강력하게 연결되지는 않습니다. 이것은 강하게 연결된 그래프의 예입니다. 이것은 연결되었지만 강하게 연결되지 않은 그래프의 예입니다. 여기서는 다음과 같은 Kosaraju 알고리즘 단계를 사용하여 그래프가 강하게 연결되어 있
원과 또 다른 직선이 있다고 가정합니다. 우리의 임무는 선이 원에 닿거나 교차하는지 확인하는 것입니다. 그렇지 않으면 외부를 통과합니다. 따라서 아래와 같이 세 가지 다른 경우가 있습니다 - 여기서는 다음 단계에 따라 해결합니다. 다음과 같습니다 - 중심과 주어진 선 사이의 수직 P 찾기 반지름 r −과 P 비교 r이면 외부 P =r이면 터치 그렇지 않으면 내부 수직 거리를 얻으려면 이 공식을 사용해야 합니다(중심점은 (h, k)) $$\frac{ah+bk+c}{\sqrt{a^2+b^2}}$$ 예시 #include
여기에서 행렬이 역행성인지 여부를 확인하는 방법을 살펴보겠습니다. 한 행렬이 M이면 역행렬 M-1은 - $$M^-1=\frac{adj(M)}{|M\lvert}$$ 따라서 M의 행렬식이 0이 아니면 역함수만 얻을 수 있고 그렇지 않으면 역함수를 얻을 수 없습니다. 그래서 여기서 우리는 행렬식이 0이 아닌지 확인해야 합니다. 행렬식을 찾는 것은 하나의 재귀 프로세스입니다. 우리는 부분행렬을 찾고, 그 행렬식을 찾은 다음, 그 결과를 최종 계산에 사용해야 합니다. 더 나은 아이디어를 얻기 위해 코드를 살펴보겠습니다. 예시 #inclu
크기가 N x M인 하나의 2D 배열이 있다고 가정합니다. 작업은 해당 요소의 XOR이 0이 아니거나 0보다 큰 방식으로 모든 행에서 숫자를 선택할 수 있는지 확인하는 것입니다. 하나의 행렬이 다음과 같다고 가정합니다. 이렇게 - 7 7 7 10 10 7 XOR을 수행하면 두 행의 마지막 요소를 제외하고 7과 10이므로 답은 0이 아닙니다. 이 문제를 해결하려면 솔루션이 매우 간단합니다. 처음에 각 행의 첫 번째 열 요소의 XOR이 0인지 확인합니다. 0이 아니면 가능합니다. 그렇지 않으면 행에 두 개 이상의 개별 요소가
이진 문자열, 또 다른 정수 k가 있다고 가정합니다. 문자열에 k 비트 바이너리의 모든 순열이 포함되어 있는지 확인해야 합니다. 문자열이 11001과 같다고 가정하고 K =2이면 k 비트 숫자의 모든 순열을 가져야 합니다. (00, 01, 10, 11), 주어진 문자열에는 모든 순열이 있습니다. 따라서 이것은 유효한 문자열입니다. 이진 문자열과 k 값을 취하여 이진 시퀀스가 일치하는지 여부를 확인해야 합니다. 이진 시퀀스는 크기 k로 구성됩니다. 따라서 2,000개의 서로 다른 이진 순열이 있을 것입니다. k 길이의 이진 값의
이진 트리가 있다고 가정해 보겠습니다. 이 이진 트리는 BST가 아닙니다. 이진 트리에 동일한 요소가 두 번 이상 포함되어 있는지 확인해야 합니다. 이를 해결하기 위해 해싱을 사용합니다. 주어진 트리를 탐색하고 각 노드에 대해 노드가 테이블에 있는지 여부를 확인하고 이미 있는 경우에는 false를 반환하고 그렇지 않으면 true를 반환합니다. 예시 #include <iostream> #include <unordered_set> using namespace std; class Node {
이진 트리가 있다고 가정합니다. 트리에 크기가 2 이상인 중복 하위 트리가 있는지 여부를 찾아야 합니다. 아래와 같은 이진 트리가 있다고 가정합니다. - 크기가 2인 두 개의 동일한 하위 트리가 있습니다. 트리 직렬화와 해싱 프로세스를 사용하여 이 문제를 해결할 수 있습니다. 아이디어는 하위 트리를 문자열로 직렬화하여 해시 테이블에 저장하는 것입니다. 리프가 아니고 이미 해시 테이블에 존재하는 직렬화된 트리를 찾으면 true를 반환합니다. 예시 #include <iostream> #include <unorder
여기에서 이진 트리가 레벨별로 정렬되었는지 여부를 확인하는 방법을 볼 것입니다. 레벨별로 정렬된 이진 트리는 다음과 같습니다. - 각 수준에서 노드는 왼쪽에서 오른쪽으로 정렬되며 각 레이어는 이전 수준보다 높은 값을 포함합니다. 레벨 순서 순회를 수행하여 이 문제를 해결할 수 있고 현재 레벨의 최소 및 최대 요소를 추적할 수 있습니다. 다른 변수 prev_max를 사용하여 이전 수준의 최대값을 유지합니다. 그런 다음 현재 레벨의 최소값과 이전 레벨 prev_max의 최대값을 비교합니다. 최소값이 prev_max보다 크면 트리
점(.)과 숫자가 있는 문자열이 있고 점은 셀이 비어 있음을 나타내고 임의의 셀에 숫자 x가 있으면 문자열 내에서 x 단계를 오른쪽이나 왼쪽으로 이동할 수 있음을 나타냅니다. 우리의 임무는 셀을 두 번 이상 방문할 수 있는지 여부를 확인하는 것입니다. 예를 들어 문자열이 . 2 . . . 2 . . 그러면 두 가지 다른 방법으로 4번째 셀을 방문할 수 있습니다. 두 번째 셀에서 오른쪽으로 두 단계 또는 셀 6에서 왼쪽으로 두 단계로 이동합니다. 문자열의 i번째 셀을 방문할 수 있는 횟수를 추적하기 위해 Visit[]라는 배열 하나
배열에 요소 목록이 있다고 가정하고 요소가 이진 검색 트리의 선주문 순회가 될 수 있는지 여부를 확인해야 합니다. 시퀀스가 {40, 30, 35, 80, 100}과 같다고 가정하면 트리는 다음과 같습니다. - 스택을 사용하여 이것을 해결할 수 있습니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 빈 스택 정의 근을 음의 무한대로 설정 선주문 순서의 모든 요소에 대해 다음을 수행합니다. - 요소가 현재 루트보다 작으면 false를 반환합니다. 요소가 스택 상단보다 큰 동안 스택에서 요소를 계속 제거하고 마지막으로 제거된
정방 행렬이 있다고 가정하고 우리의 임무는 행렬이 Hankel 행렬인지 여부를 확인하는 것입니다. Hankel 행렬은 왼쪽에서 오른쪽으로 오름차순 스큐 대각 요소가 일정한 정사각형 행렬입니다. 행렬이 아래와 같다고 가정 - 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 행렬이 Hankel Matrix인지 확인하려면 mat[i, j] =ai+j인지 확인해야 합니다. 아니면. ai+j 다음과 같이 정의할 수 있습니다 - $$a_{i+j}=\begin{cases}mat[i+j,0
우리는 10자리 휴대폰 번호를 가지고 있으며, 우리의 임무는 그 번호가 공상 번호인지 확인하는 것입니다. 멋진 번호에는 세 가지 조건이 있습니다. 적어도 하나가 참이면 그 숫자는 환상적입니다. 이러한 조건은 다음과 같습니다 - 555와 같이 단일 숫자가 세 번 연속으로 나타납니다. 3개의 연속된 숫자는 123 또는 321과 같이 오름차순 또는 내림차순입니다. 한 자리 숫자는 8965499259와 같이 숫자에서 4번 이상 나타납니다. 여기서는 9가 4번 나타납니다. 팬시넘버의 한 예로 9859009976을 들 수 있는데 세 번째
숫자 n과 자릿수 d가 있다고 가정합니다. 숫자 n이 2에서 32 사이의 모든 밑수에서 d 자리 숫자로 표시될 수 있는지 확인해야 합니다. 숫자 n이 8이고 d =4라고 가정하면 이진수로 1000으로 나타낼 수 있습니다. 여기서 d는 4입니다. . 아이디어는 2에서 32까지 모든 기지를 하나씩 확인하는 것입니다. 다음 단계에 따라 기지를 확인할 수 있습니다. 숫자가 밑수보다 작고 숫자가 1이면 true를 반환합니다. 숫자가 하나 이상이고 숫자가 밑수보다 크면 num/base를 수행하여 숫자에서 마지막 숫자를 제거하여 자릿수를 줄
정수가 있다고 가정하고 숫자가 자릿수의 계승의 합을 나누는지 찾아야 합니다. 숫자가 19이고 계승의 합이 (1! + 9!) =362881이라고 가정하고 이것은 19로 나눌 수 있습니다. 이 문제를 해결하기 위해 숫자를 취한 다음 각 자릿수의 계승을 계산하고 합을 더합니다. 합이 숫자 자체로 나눌 수 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 예시 #include <iostream> using namespace std; int factorial(int n){ if(n == 1
여기서 번호가 Pronic 번호인지 여부를 확인하는 방법을 살펴보겠습니다. 직사각형을 형성하도록 배열할 수 있는 수를 음수(pronic number)라고 합니다. 처음 몇 개의 음수는 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342입니다. 두 개의 연속 정수. 따라서 음수 n =x * (x + 1). 여기서 우리는 몇 가지 pronic number를 확인하고 생성할 것입니다. 예시 #include <iostream> #inc
여기서 우리는 숫자가 동일한 합을 갖는 하나 이상의 세그먼트로 분할될 수 있는지 여부를 확인할 수 있는 프로그램을 볼 것입니다. 숫자가 74325와 같다고 가정하면 이것은 세 부분으로 분할될 수 있습니다 (7), (4, 3), (2, 5), 모두 동일한 um 값입니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 숫자를 문자열로 사용 배열을 사용하여 배열의 접두사 합계를 보유 이제 두 번째 요소에서 마지막 요소로 이동하고 첫 번째 세그먼트는 0에서 i-1까지이며 합계는 prefix_sum[i - 1]에 위치합니다. 1에서
여기서 우리는 숫자가 13의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자가 다음 상황을 충족하는 경우 숫자는 13으로 나눌 수 있습니다. - 교번 합계를 얻는 경우에만 숫자를 13으로 나눌 수 있습니다. 크기 3의 블록은 2 – 911 + 285 =-650이며 13으로 나눌 수 있습니다. 숫자는 나머지에 4를 곱한 마지막 숫자도 13으로 나눌 수 있는 경우에만 13으로 나눌 수 있습니다. 예를 들어 2353을 고려합니다. 위의 규칙을 적용하면