Fleury의 알고리즘은 주어진 그래프에서 오일러 경로 또는 오일러 회로를 표시하는 데 사용됩니다. 이 알고리즘에서는 한 모서리에서 시작하여 이전 정점을 제거하여 다른 인접 정점을 이동하려고 합니다. 이 트릭을 사용하면 그래프가 오일러 경로 또는 회로를 찾기 위한 각 단계에서 더 간단해집니다. 경로 또는 회로를 얻으려면 몇 가지 규칙을 확인해야 합니다. 그래프는 오일러 그래프여야 합니다. 에지가 두 개일 때 하나는 브리지이고 다른 하나는 비 브리지이므로 처음에는 비 브리지를 선택해야 합니다. 시작 정점을 선택하는 것
유일한 안전한 방법은 오버플로가 발생하기 전에 확인하는 것입니다. 하지만 정수 오버플로를 확인하는 몇 가지 해킹 방법이 있습니다. 따라서 unsigned int 추가에서 오버플로를 감지하려는 경우 결과가 실제로 추가된 값보다 작은지 확인할 수 있습니다. 예를 들어, 예시 unsigned int x, y; unsigned int value = x + y; bool overflow = value < x; // Alternatively "value < y" should also work 이는 x와 y가 모두
여기서 우리는 한 가지 흥미로운 문제를 보게 될 것입니다. 문자열의 1 사이에 0이 있는지 확인해야 합니다. 그렇지 않으면 문자열이 유효하고 그렇지 않으면 유효하지 않습니다. 세 개의 문자열이 있다고 가정합니다 - 10001111010 00001111100 01111101111 이 세 문자열 중에서 1의 스트림 안에 0이 없기 때문에 B만 유효합니다. 이 문제를 해결하기 위해 우리는 문자열에 있는 처음 1의 인덱스를 찾고 마지막 1의 인덱스도 찾습니다. 그런 다음 이 두 인덱스에서 0이 있는지 확인하고, 그렇다면 false를
여기서 우리는 또 다른 흥미로운 문제를 보게 될 것입니다. 다음 기준을 가진 문자열을 허용하는 코드를 작성해야 합니다. 연속된 1의 모든 그룹은 길이가 2여야 합니다. 연속된 1의 모든 그룹은 1개 이상의 0 뒤에 나타나야 합니다. 0110과 같은 문자열이 있다고 가정합니다. 이것은 유효한 문자열이고 001110, 010이 유효하지 않은지 여부 여기에서 접근 방식은 간단합니다. 우리는 1의 발생을 찾고 그것이 하위 문자열 011의 일부인지 여부를 확인해야 합니다. 조건이 실패하면 하위 문자열에 대해 false를 반환하고 그렇
그래프의 연결성을 확인하기 위해 순회 알고리즘을 사용하여 모든 노드를 순회하려고 합니다. 순회 완료 후 방문하지 않은 노드가 있으면 그래프가 연결되지 않습니다. 방향 그래프의 경우 연결을 확인하기 위해 모든 노드에서 순회를 시작합니다. 때때로 한 가장자리에는 바깥쪽 가장자리만 있고 안쪽 가장자리는 없을 수 있으므로 해당 노드는 다른 시작 노드에서 방문하지 않습니다. 이 경우 순회 알고리즘은 재귀적 DFS 순회입니다. 입력 − 그래프의 인접 행렬 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0
C++17은 기존 if 문의 구문을 확장했습니다. 이제 if 문 자체 내에서 초기 조건을 제공할 수 있습니다. 이 새로운 구문을 이니셜라이저가 있는 if 문이라고 합니다. 이 개선 사항은 일반적인 코드 패턴을 단순화하고 사용자가 범위를 좁게 유지하는 데 도움이 됩니다. 그러면 범위 외부로 변수가 누출되는 것을 방지할 수 있습니다. 예시 주어진 숫자가 짝수인지 홀수인지 확인하고 싶다고 가정해 봅시다. C++17 이전에는 다음과 같은 코드가 사용되었습니다. - #include <iostream> #include <cs
여기서 우리는 문자열이 번갈아 가며 구성되어 있는지 확인하는 방법을 볼 것입니다. 문자열이 XYXYXY와 같으면 유효하고, ABCD와 같으면 무효입니다. 접근 방식은 간단합니다. i번째 문자와 i+2번째 문자가 모두 같은지 확인합니다. 동일하지 않으면 false를 반환하고 그렇지 않으면 true를 반환합니다. 예시 #include <iostream> using namespace std; bool hasAlternateChars(string str){ for (int i = 0; i < str
여기서 우리는 숫자가 15의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자가 15의 배수인지 확인하려면 숫자가 5의 배수이고 3의 배수인지 확인합니다. 따라서 5의 배수를 확인하려면 마지막 숫자가 0 또는 5인지 확인해야 합니다. 3의 배수를 확인하려면 다음을 수행합니다. 숫자의 합이 3으로 나누어 떨어지는지 확인하십시오. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv15(st
여기서 우리는 숫자가 11의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자가 11로 나누어 떨어지는지 확인하려면 홀수 위치 값의 합과 짝수 위치 값의 합이 같으면 11의 배수입니다. 예 #include <bits/stdc++.h> using namespace std; bool isDiv11(string num){ int n = num.length(); long odd_sum = 0, even
여기서 우리는 숫자가 2, 3, 5로 나누어 떨어지는지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 어떤 숫자가 2,3, 5의 최소공배수(LCM)로 나누어 떨어지면 2, 3, 5로 나눌 수 있습니다. 따라서 2, 3, 5의 최소공배수는 30입니다. 우리는 그 수가 30으로 나누어 떨어지는지 확인해야 합니다. 10의 배수(마지막 자릿수가 0)와 3의 배수(모든 자릿수의 합이 3의 배수)일 때 30의 배수입니다. 예시 #include <bits/stdc++.
여기서 우리는 숫자가 20의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 어떤 수는 20의 배수가 되고, 10의 배수는 10이고, 10을 나눈 나머지는 2의 배수가 됩니다. 따라서 사례는 간단합니다. 마지막 숫자가 0이면 10의 배수이고, 10의 배수이면 마지막 두 번째 요소가 2의 배수이면 20의 배수입니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv20(string num)
여기서 우리는 숫자가 25로 나누어 떨어지는지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자는 마지막 두 자리가 00일 때 25의 배수가 되거나 25의 배수가 됩니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv25(string num){ int n = num.length(); int last_two_digit_val = (num[n-2] - &
여기에서 숫자가 3으로 나누어 떨어지는지 확인하는 방법을 살펴보겠습니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자의 합이 3의 배수이면 3의 배수가 됩니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv3(string num){ int n = num.length(); long sum = accumulate(begin(num), end(num), 0) - '0'
여기서 우리는 숫자가 5의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자가 5의 배수인지 확인하려면 5의 배수인지 확인하려면 마지막 숫자가 0 또는 5인지 확인해야 합니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv5(string num){ int n = num.length(); if(num[n - 1] != '5'
여기서 우리는 숫자가 75로 나누어 떨어지는지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자는 75의 배수가 되며 3의 배수이기도 하고 25의 배수이기도 합니다. 자릿수의 합이 3의 배수이면 3의 배수이고 마지막 두 자리의 배수가 25이면 숫자는 25의 배수입니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv75(string num){ int n = num.length
여기서 우리는 숫자가 8의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 마지막 세 자리의 숫자가 8의 배수인 경우 해당 숫자는 8의 배수가 됩니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv8(string num){ int n = num.length(); int last_three_digit_val = (num[n-3] - '
여기서 우리는 숫자가 9의 배수인지 아닌지 확인하는 방법을 볼 것입니다. 이 경우 숫자는 매우 큰 숫자입니다. 그래서 우리는 숫자를 문자열로 넣습니다. 숫자의 합이 9의 배수이면 9의 배수가 됩니다. 예시 #include <bits/stdc++.h> using namespace std; bool isDiv3(string num){ int n = num.length(); long sum = accumulate(begin(num), end(num), 0) - '0'
이 섹션에서는 선분이 원점을 통과하는지 확인하는 방법에 대해 알아봅니다. 선분의 끝점을 나타내는 두 개의 좌표점이 있습니다. 접근 방식은 간단합니다. 직선의 방정식을 만들 수 있고 방정식에 (0, 0)을 대입하여 방정식을 만족하면 직선은 원점을 통과합니다. 점이 이고 이 두 선을 통과하는 선의 방정식은 -라고 가정합니다. $$y-y_{1}=\left(\frac{y_{2}-y_{1}}{x_{2}-x_{1}}\right)*\lgroup x-x_{1}\rgroup +c$$ x =0 및 y =0을 넣으면 $$x_{1}\l그룹 y_
여기서 우리는 숫자를 2의 0이 아닌 두 거듭제곱의 합으로 나타낼 수 있는지 확인합니다. 따라서 주어진 숫자 N이 (2x + 2y 0. 숫자가 10이라고 가정하면 23으로 나타낼 수 있습니다. + 21 . 접근 방식은 간단합니다. 두 가지 경우가 있습니다. 숫자 n이 짝수이면 2x 0. 또 다른 경우는 N이 홀수이고 2의 거듭제곱의 합으로 표시될 수 없다는 것입니다. 거듭제곱을 0으로 사용할 수 없으므로 홀수를 얻을 수 없습니다. 모든 홀수에 대해 이진 표현의 LSb는 1 예시 #include <iostream> usi
여기서 우리는 하나의 숫자가 두 개 이상의 연속된 숫자의 합으로 표현될 수 있는지 여부를 확인할 것입니다. 숫자가 12라고 가정합니다. 이것은 3+4+5로 나타낼 수 있습니다. 이 문제를 해결하는 직접적이고 가장 쉬운 방법이 있습니다. 숫자가 2의 거듭제곱이면 연속된 숫자의 합으로 표현할 수 없습니다. 명심해야 할 두 가지 사실이 있습니다. 연속된 두 숫자의 합이 홀수이면 그 중 하나는 홀수이고 다른 하나는 짝수입니다. 두 번째 사실은 2n입니다. =2(n-1) + 2(n-1) . 예시 #include <iostream&