바킹독의 실전 알고리즘 : 재귀재귀 : 하나의 함수에서 자기 자신을 다시 호출하여 작업을 수행하는 알고리즘 (recursion)N부터 1까지 출력하는 함수int print_n(int n){ if(n==0) return 0; cout1부터 N까지의 합을 구하는 함수int sum_n(int n, int sum){ if(n==0) return sum; return sum_n(n-1,sum+n);}int main(void){ int sum=0; cout더 직관적인 재귀는 아래와 같다. int sum_n(int n) { if (n == 1) return 1; return n + sum_n(n - 1); // n 더하기 (1부터 n-1까지의 합)}물론 sum은 그냥 수열 ..
바킹독의 실전 알고리즘 : DFSDFS : 다차원 배열에서 각 칸을 방문할 때 깊이를 우선순위로BFS : 다차원 배열에서 각 칸을 방문할 때 너비를 우선순위로 DFS 방법시작하는 칸을 스택에 넣고 방문했다는 표시를 남김 스택에서 원소를 꺼ㅐ서 상하좌우로 인접한 칸에 대해 3번을 진행 이전에 방문했다면 continue;, 처음으로 방문했다면 표시 남기고 스택에 삽입 스택이 빌 때까지 2번을 반복 -> 모든 칸이 스택에 1번씩 들어가므로 시간복잡도는 O(n)구현구현은 내가 일단 시도해보자. #include using namespace std;#define X first #define Y second int board[502][502]; // 0,1로 정의된 배열 vool vis[502][502];int n=..
바킹독의 실전 알고리즘 : BFS알고리즘 설명BFS는 Breadth First Search는 다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 방문하는 알고리즘이다. 본디 BFS는 그래프라는 자료구조에 모든 노드를 방문하기 위해 제안된 알고리즘이다. #include using namespace std;int main(void){ pair t1=make_pair(10,13); pair t2={4,6}; coututility 헤더에 있는 pair는 두 자료형을 묶어서 다닐 수 있다. BFS는 정말 숙달되도록 잘 알아야 한다. 그 냥 외 우 는 걸 추 천 했 으 니외우자.. {% raw %}#include using namespace std;#define X first#define Y sec..
정의와 성질양쪽 끝에서 삽입 삭제 전부 가능한 자료구조이다. Double Ended Queue라고 큐의 진화형 느낌이다. 큐의 성질원소의 추가가 O(1)원소의 제거가 O(1)제일 앞/뒤 원소 확인이 O(1)앞뒤 외의 원소들은 원칙적으로 확인/변경 불가능 다만 STL deque에서는 인덱스로 원소 접근이 가능하다. 기능과 구현const int MX=100005;int dat[2*MX+1];int head=MX, tail=MX;void push_front(int x){ dat[--head]=x;}void push_back(int x){ dat[tail++]=x;}void pop_front(){ head++;}void pop_back(){ tail--;}int front(){ ret..
정의와 성질큐는 FIFO 바로 나와주면 된다. 큐의 성질원소의 추가가 O(1)원소의 제거가 O(1)제일 앞/뒤 원소 확인이 O(1)앞뒤 외의 원소들은 원칙적으로 확인/변경 불가능 추가 -rear제거 -front로 보통 나타낸다. 기능과 구현스택 어렵지 않았으니까 걍 내가 구현해보자. const int MX = 100005;int dat[MX];int tail=0; // 추가 int head=0; // 제거void push(int x){ dat[tail++]=x;}void pop(){ head++;}int front(){ return dat[head];}int back(){ return dat[tail-1];}제미나이한테 던졌더니 길이 제한 생각 안 하냐고 혼났다. 그치 대기큐 같은 ..