Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 메모리구조
- buffer
- 윤성우 열혈자료구조
- datastructure
- Graph
- 알기쉬운 알고리즘
- insertion sort
- JSON
- coding test
- C programming
- 윤성우의 열혈 자료구조
- C 언어 코딩 도장
- 이스케이프 문자
- s
- stream
- list 컬렉션
- Selection Sorting
- R
- Serialization
- 혼자 공부하는 C언어
- Stack
- Algorithm
- 이것이 자바다
Archives
- Today
- Total
Engineering Note
59. 부분집합(DFS) 본문
it 취업을 위한 알고리즘 문제풀이
문제
코드
//59. 부분집합(MS인터뷰:DFS)
#include <stdio.h>
#include <stdlib.h>
int n, ch[11];
void dfs(int level) {
if (level == n + 1) {
for (int i = 1; i <= n; ++i) {
if (ch[i] == 1)
printf("%d ", i);
}
printf("\n");
return;
}
else {
ch[level] = 1;
dfs(level + 1);
ch[level] = 0;
dfs(level + 1);
}
}
int main() {
freopen("input.txt", "rt", stdin);
scanf("%d", &n);
dfs(1);
return 0;
}
문제해결방법
- 트리에서 level을 number로 정의하고 해당 level에서 좌측 노드의 순회 할때 해당 number가 부분집합의 포함 된다고 체크하고 우측 노드로 순회할때 해당 nuber가 부분집합의 포함되지 않는 다고 체크한다.
- 재귀함수의 return 조건은 level이 주어진 문제보다 1이 클 경우 return 하고 return 전에 check 배열의 상태를 보고 부분집합을 출력한다. - check 배열의 number는 인덱스번호와 일치 시켜서 체크 한다.
'Problem Solving > Olympiad in Informatics' 카테고리의 다른 글
60. 합이 같은 부분집합(DFS : 아마존 인터뷰) (0) | 2021.04.15 |
---|---|
60. 합이 같은 부분집합(DFS : 아마존 인터뷰) (0) | 2021.04.15 |
51. 영지(territory) 선택 : (large) (0) | 2021.04.06 |
50. 영지(territory) 선택 : (small) (0) | 2021.04.05 |
48. 각 행의 평균과 가장 가까운 값 (0) | 2021.04.04 |
Comments