Algorithm
부분집합(MS 인터뷰, DFS:완전탐색)
욜스터
2021. 2. 5. 15:14
728x90
▣ 문제
자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램 을 작성하세요.
▣ 입력설명
- 첫 번째 줄에 자연수 N(1<=N<=10)이 주어집니다.
▣ 출력설명
- 첫 번째 줄부터 각각의 부분집합을 출력합니다. 부분집합을 출력하는 순서는 출력예제에서 출력한 순서와 같게 합니다. 단 공집합은 출력하지 않습니다.
▣ 입력설명
3 |
▣ 입력설명
1 2 3 1 2 1 3 1 2 3 2 3 |
<코드>
#include <stdio.h>
int N;
void D(int x, int *check, int printt) {
if (x > N) {
if (printt) {
for (int i = 1; i <= N; i++) {
if (check[i] == 1) printf("%d ", i);
}
printf("\n");
return;
}
else return;
}
else {
check[x] = printt;
D(x + 1, check, 1);
D(x + 1, check, 0);
}
}
int main() {
scanf("%d", &N);
for (int i = 1; i <=N; i++) {
int check[11] = { 0 };
D(i, check, 1);
}
return 0;
}
<전상일씨 코드>
#include<stdio.h>
int n;
int check[11] = { 0 };
void dfs(int x) {
if (x == n + 1) {
for (int i = 1; i <= n; i++) {
if (check[i] == 1) printf("%d ", i);
}
printf("\n");
return;
}
check[x] = 1;
dfs(x + 1);
check[x] = 0;
dfs(x + 1);
}
int main() {
scanf("%d", &n);
dfs(1);
return 0;
}
접근 방법
어려워 어려워어ㅕ루어여우어
728x90
반응형