728x90

Algorithm 3

전체 탐색에서 부분합 문제를 비트를 사용하는 방법

부분합 문제 예를들어, vec{1,2,4,5,11} 이라는 숫자의 부분합으로 10이 나올 수 있는지 파악하는 방법으로 비트연산으로 하는 방법이 있어서 블로그에 기록해본다 비트연산을 활용하여 하는 방법이 있는데, 위의 벡터의 부분합의 가지수는 총 32가지 즉, 비트로 11111 (2^5) 로 나타낼 수 있다. 예를 들면 1, 4, 5를 선택 하면 10이 나오는데, 이는 비트로 01101(오른쪽부터 vec[0]이라고 치면) 로 나타낼 수 있다. 코드로 치면 다음과 같다 #include #include using namespace std; int main() { bool isCanmake = false; vector vec = { 1,2,4,5,11 }; int answer = 10; for (int i = ..

Algorithm 2023.04.09

Bubble Sort

버블 정렬 버블 정렬은 옆에 있는 값과 비교하여 더 작은 값을 앞으로 보내는 것이다. 따라서 5 3 4 1 2 라고 있으면 3 5 4 1 2 3 4 5 1 2 3 4 1 5 2 3 4 1 2 5 이와 같이 한번 순회를 하면 맨 뒤가 제일 큰 값이 오게 된다. 한번 순회가 완료되면 맨 뒤는 비교해 줄 필요가 없다. 따라서 이중 for문을 이용하여 다음과 같이 구현 할 수 있다. vector BubbleSort(vector& _vec) { for (int i = 0; i _vec[j + 1]) // 앞의 값이 더 크다면 { int iTemp = _vec[j]; ..

Algorithm 2022.06.27