728x90
그래프
DFS, BFS
더보기
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define MAX 1000
using namespace std;
int N;
vector<int> Graph[MAX + 1];
vector<bool> Visit;
void DFS(int V) {
Visit[V] = true;
cout<< V << endl;
for(int i = 0; i < Graph[V].size(); i++) {
int Next = Graph[V][i];
if(!Visit[Next]) DFS(Next);
}
}
void BFS(int V) {
Visit[V] = true;
queue<int> q;
q.push(V);
while(!q.empty()) {
int cur = q.front();
cout << cur << endl;
q.pop();
for(int i = 0; i < Graph[cur].size(); i++) {
int Next = Graph[cur][i];
if(!Visit[Next]) {
Visit[Next] = true;
q.push(Next);
}
}
}
}
DP
더보기
첫 번째 방법 : 재귀하되 저장 / 위 부터 계산해서 내려가는 Top-Down 방식
int save[100];
int DP(int x) {
if(x == 1) return 1;
if(x == 2) return 1;
if(save[x] != 0) return save[x]; // 처음 만난 문제가 아닐경우, 기존것 불러오기
return save[x] = DP(x-1) + DP(x+1); // 처음 만난 문제라면 계산하기
}
두 번째 방법 : 재귀안하고 반복문으로 처음부터 저장 / 아래부터 계산해서 올라가는 Bottom-Up 방식
int save[100];
int DP(int x) {
save[0] = 0;
save[1] = 1;
for(int i = 2; i <= n; i++) {
save[i] = save[i-1] + save[i-2];
}
return save[x];
}
728x90
반응형
'Algorithm > C,C++' 카테고리의 다른 글
[Programmers] C++ 스택/큐 - 같은 숫자는 싫어 (0) | 2023.12.30 |
---|---|
[Programmers] C++ 해시 / 완주하지 못한 선수 (0) | 2023.12.29 |
[Baekjoon] C++ 백준 25501 - 재귀의귀재 (0) | 2023.03.01 |
[C++] std::string::erase 문자열에서 일부 문자 지우기 (0) | 2022.01.12 |
[C++] String 대문자 소문자 간 변환 방법 (0) | 2022.01.09 |