인프런 알고리즘테스트 문제
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;
}