본문 바로가기

알고리즘5

[비트 마스킹][c++] 개념과 활용 방법에 대해서 알아보자 목차 비트연산자의 기본 사용&비트단위로 AND 연산을 한다.|비트단위로 OR 연산을 한다.^비트단위로 XOR 연산을 한다.~피연산자의 모든 비트를 반전시킨다.피연산자의 비트 열을 왼쪽으로 이동시킨다.>>피연산자의 비트 열을 오른쪽으로 이동시킨다.  비트연산자의 활용 방법idx번째 비트끄기S &= ~(1 idx번째 비트 XOR 연산S ^= (1 최하위 켜져있는 비트 찾기idx = (S & -S)크기가 n인 집합의 모든 비트를 켜기(1idx번째 비트를 켜기S |= (1 idx번째 비트가 켜져 있는지 확인하기if(S & (1   idx번째 비트끄기#include#includeusing namespace std;//idx번째 비트끄기int main() { int S = 18; //10010 .. 2024. 7. 9.
완전탐색과 백트래킹 c++ 설명 완전 탐색완전 탐색은 말 그대로 모든 경우의 수를 탐색하는 방법으로 브루트 포스라고 불린다(brute-force)완전 탐색의 방법은 반복문과 재귀함수로 나뉜다. 반복문반복문으로 가능하다면 반복문으로 하는 것이 좋다. 재귀함수너무 복잡하거나 어떠한 행위는 반복하는데 매개변수만 수정해서 넘기면 될 것 같은 경우에 시행한다.   예시 문제100이하의 수 조합이 주어질 때 소수가 되는 경우의 수를 모두 구하여라 입력예시:1024 35 38 40 49 59 60 67 83 98 코드 구현#include #include #include #include #include using namespace std;vector v;vector s;bool isPrime(int n) { if (n == 0) return fal.. 2024. 6. 24.
[백준][이진 탐색] 1654 랜선 자르기 c++구현 및 설명 목차 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 문제 구현 방향 범위가 아주 크기 때문에 이진 탐색을 통해 해결하지 않으면 시간 초과가 나는 문제이다. 또한 정수의 범위가 매우 크기 때문에 long long int를 쓰고자 했다. 아래 기본 코드에서 약간 변형하고 아이디어를 더하면 풀리는 문제이다. 이진탐색 기본 구현 코드 #include #include #include using namespace std.. 2024. 2. 27.
[정렬 알고리즘] 버블, 선택, 삽입 정렬 c++ 구현 단순한 정렬 알고리즘 3가지를 알아보고자 한다. 아래 알고리즘 3개는 정말 단순하기 때문에 금방 이해하고 구현할 수 있다. 버블 정럴 버블 정렬은 인접한 두 개의 데이터를 비교해가면서 정렬을 진행하는 방식이다. 시간 복잡도 O(n^2) 코드 구현 #include using namespace std; // 버블 정렬 함수 void bubbleSort(int arr[], int n) { for (int i = 0; i arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; .. 2024. 2. 27.
728x90