-
dfs 복습인프런 알고리즘테스트 문제 2021. 2. 4. 14:47
선배님께서 코테를 공부할때 항상 이전에 푼 문제들을 다시 한번 풀고 새로운 문제를 받아들여라고 하셨다..
따라서 나는 앞으로 매일 이전에 푼 dfs문제들을 새롭게 다시 푼 후 새로운 문제들을 해결해나갈것이다.
56번
#include<iostream> using namespace std; int div(int v) { if(v>3) { return 0; } else { cout << v << " "; div(v+1); } } int main() { div(1); }
57번
#include<iostream> using namespace std; int div(int v) { int tmp = v; if(v<1) { return 0; } else { div(v/2); cout << tmp%2; } } int main() { div(11); }
58번
#include<iostream> using namespace std; int div1(int v) { if(v>7) { return 0; } else { cout << v; div1(v*2); div1(v*2+1); } } int div2(int v) { if(v>7) { return 0; } else { div2(v*2); cout << v; div2(v*2+1); } } int div3(int v) { if(v>7) { return 0; } else { div3(v*2); div3(v*2+1); cout << v; } } int main() { div1(1); cout << endl; div2(1); cout << endl; div3(1); }
59번
#include<iostream> using namespace std; int ch[4]; int div(int v) { if(v==4) { for(int i=1;i<4;i++) { if(ch[i]==1) { cout << i; } } cout << endl; } else { ch[v]=1; div(v+1); ch[v]=0; div(v+1); } } int main() { div(1); }
60번
#include<stdio.h> int n, a[11], total=0; bool flag=false; void DFS(int L, int sum){ if(sum>(total/2)) return; if(flag==true) return; if(L==n+1){ if(sum==(total-sum)){ flag=true; } } else{ DFS(L+1, sum+a[L]); DFS(L+1, sum); } } int main(){ int i; scanf("%d", &n); for(i=1; i<=n; i++){ scanf("%d", &a[i]); total+=a[i]; } DFS(1, 0); if(flag) printf("YES\n"); else printf("NO\n"); return 0; }
61번
#include<iostream> using namespace std; int n, a[11], total=0,cnt = 0; bool flag=false; int div(int v,int sum) { if(v==n+1) { if(total==sum) { cnt++; } } else { div(v+1,sum+a[v]); div(v+1,sum-a[v]); div(v+1,sum); } } int main() { int tmp; cin >> n >> total; for(int i=1;i<=n;i++) { cin >> tmp; a[i] = tmp; } div(1,0); cout << cnt; }
'인프런 알고리즘테스트 문제' 카테고리의 다른 글
재귀 dfs 복습 (0) 2021.02.02 58번 dfs 알고리즘 (0) 2020.10.04 57번 재귀함수 (0) 2020.10.04 56번 재귀함수 (0) 2020.10.04 알고리즘 문제 복습(10~20번) (0) 2020.09.19