본문 바로가기

알고리즘37

재귀(recursive) 함수 재귀 함수 자기 자신을 다시 호출하는 함수 재귀 함수 사용시 재귀 함수의 종료 조건을 반드시 명시해야 한다. 종료 조건을 명시하지 않으면 무한히 호출될 수 있다. 재귀 함수를 잘 활용하면 복잡한 알고리즘을 간결하게 작성할 수 있음 컴퓨터가 함수를 연속적으로 호출하면 컴퓨터 메모리 내부의 스택 프레임에 쌓인다. - 그래서 스택을 사용해야 할 때 구현상 스택 라이브러리 대신에 재귀 함수 사용 가능 #include using namespace std; void recursive(int i) { if (i == 100) return; cout 2021. 4. 12.
queue 자료구조 설명 및 구현(c++) 큐 자료구조 - 먼저 들어온 데이터가 먼저 나가는 방식 (선입선출)의 자료구조 큐의 경우 복잡하게 생각할 것이 없다. 딱 편의점이라고 생각하면 쉽다. 편의점에서 알바생들이(나도 편의점 아르바이트는 많이 해봤지만...) 예전 물건들을 앞으로 내놓고 가장 최근에 들어온 물건들을 뒤에 놓는다. 왜냐? 제일 오래된 물건들을 먼저 팔아야 전체적인 물건의 유통기한도 길어질 뿐만 아니라 유통기한 지남에 의한 손해를 줄이기 위해서이다. queue 자료구조는 이와 동일하다. stack과 달리 먼저 들어온 자료가 먼저 나가도록 설계되었다. Queue STL로 구현 #include #include using namespace std; int main() { // 큐 생성 queue q; // push q.push(1); q.. 2021. 4. 9.
DFS & BFS 이해하기 및 구현(C++) DFS : Depth First Search(깊이 우선 탐색) - 그래프 전체를 탐색하는 방법 중 하나. (완벽히 탐색) - 시작점부터 다음 branch로 넘어가기 전에 해당 branch를 완벽하게 탐색하고 넘어가는 방법. - [재귀함수]나 [스택]으로 구현. 1. 탐색 시작 노드를 스택에 삽입하고 방문처리 2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문처리 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 2번의 과정을 수행할 수 없을 때까지 반복 - 노드 방문 시 방문(visited) 여부를 반드시 검사해야 한다. 아니면 무한 루프에 빠질 수 있음. - 탐색 과정이 시작 노드에서 한없이 깊이 진행되는 것을 막기 위해 깊이 제한(.. 2021. 3. 8.
stack 자료구조 설명 및 구현(c++) 스택 자료구조 - 먼저 들어온 데이터가 나중에 나가는 형식 (선입후출)의 자료구조 STL로 구현 #include #include using namespace std; int main(void) { stack s; // 스택생성 // 삽입(1) - 삽입(2) - 삽입(3) - 삭제() - 삽입(4) - 삽입(5) - 삭제() s.push(1); s.push(2); s.push(3); s.pop(); s.push(1); s.push(4); s.pop(); cout 2021. 3. 3.