즉 , 완전 탐색 알고리즘은 문제를 정확히 해결하긴 하지만 효율적인 동작 코드라고 할순 없겠다.
반복문으로 사용해야하는 시간 복잡도가 큰 문제일수록 완전 탐색 알고리즘을 사용하여 문제를 해결 하는것은 최선의 방법이 아닐수도 있다는것이다.
결국, 완전 탐색 알고리즘을 사용할때에는 그 문제에 대한 확실한 파악이 필요하다.
완전 탐색 알고리즘을 사용해 문제를 풀기전에 다음 세가지를 고려해보자.
만약, [1,2,3] 의 수열이 주어졌다면, [3,2,1] 등 순서를 바꾸어서 연산하는 방법이다.
순서를 바꿔서 접근하면 원하는 답에 훨씬 빠르게 접근할수 있는 경우도 있다.

재귀를 탈출 하기 위한 탈출 조건이 필요하다
현재 함수의 상태를 저장하는 parameter가 필요하다
return 문을 신경을 잘 써줄것.
완전탐색 재귀와 Dynamic Programming 과 매우 흡사한 점이 있는데,Dynamic Programming 또한 Top - Down 을 사용시 재귀를 사용하게 되는데 기저 사례를 통해 탈출 조건을 만들고, 현재 함수의 상태를 전달하는 parameter 를 전달한다.
또한, return 을 통해 필요한 값을 반환하여 정답을 구하는 연산시 사용하게 되는것 또한 아주 비슷하다.
완전 탐색의 재귀와 Dynamic Programming 의 차이점은 DP는 작은 문제가 큰 문제와 동일한 구조를 가져 큰 문제의 답을 구할 시에 작은 문제의 결과를 기억한 뒤 그대로 사용하여 수행 속도를 빠르게 한다는 것이다.
그에 반해 완전 탐색의 재귀는 크고 작은 문제의 구조가 다를수 있고, 이전 결과를 반드시 기억하는것이 아니라 해결 가능한 모든 방법을 탐색한다는 차이점이 있다.
비트(bit)연산이란 다음과 같다.

그렇다면 비트 연산을 통해 집합을 나타내는 방법은 어떤것이 있을까

꽤 괜찮게 정리해주신분이 계셔서 가져왔다!
결론적으로 비트 연산을 어떻게 활용해야하는가
집합 포함 여부 검사
숫자 추가하기
특정 숫자 제거하기
토글 연산하기
전체집합, 공집합 표현하기
BFS는 너비 우선 탐색으로 현재 정점과 인접한 정점을 우선으로 탐색하는 방법
DFS는 깊이 우선 탐색으로 현재 인접한 정점을 탐색후 그 다음으로 인접한 정점을 탐색하여 끝까지 탐색하는 방법이다.
( BFS, DFS 에 대한 글을 더 찾아보고 따로 글로 작성해봐야겠다. )