티스토리 뷰
자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하세요.
재귀를 이용한 완전탐색을 하며, 이진트리 전위순회 방식으로 출력한다. (공집합 제외)
#include <stdio.h>
#include <vector>
using namespace std;
int num;
int ch[11] = { 0 };
void dfs(int lv) {
if (lv == num + 1) {
for (int i = 1; i <= num; i++) {
if (ch[i] == 1) {
printf("%d ", i);
}
}
printf("\n");
return;
}
else {
ch[lv] = 1;
dfs(lv + 1);
ch[lv] = 0;
dfs(lv+1);
}
}
int main() {
scanf("%d", &num);
dfs(1);
}
DFS를 사용하여 부분집합을 구한다.
이진 트리에서 하나의 vertex 는 1 ~ N 중의 하나의 숫자가 되고
node 는 vertex의 숫자를 포함시킬건지 아닌지를 체크한다.
ch 배열은 노드의 역할을 하게 된다. 왼쪽 자식으로 가는 경우에는 부분집합에 포함한다는 의미로 해당 인덱스에 1을 주고, 오른쪽 자식으로 가는 경우에는 포함하지 않는다는 의미에서 해당 인덱스에 0을 준다.
인덱스 끝까지 탐색을 마치면 ch 배열에 1을 갖는 값만 출력한다.
이 문제는 직접 그림을 그려보면서 하는 것이 이해하기 쉽다.
'알고리즘 > C++' 카테고리의 다른 글
[C++] DFS 특정 수 만들기 (MS 인터뷰 문제) (0) | 2020.02.26 |
---|---|
[C++] DFS 합이 같은 부분집합 (아마존 인터뷰 문제) (0) | 2020.02.26 |
[C++] 프로그래머스 H-Index (0) | 2020.02.25 |
[C++] 프로그래머스 K번째 수 (0) | 2020.02.25 |
[C++] 프로그래머스 같은 숫자는 싫어 (0) | 2020.02.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- django 태그
- 장고 게시판
- 실시간 데이터베이스
- Django
- CellForRowAt 호출안됨
- iOS 검은 화면
- iOS 화면 안나옴
- 알파벳 카운팅
- 데이터베이스 추천
- CellForRowAt Not Called
- Firebase 데이터베이스 추천
- pythonanywhere배포방법
- 까만 화면
- 웹 배포
- iOS 데이터베이스
- python 웹 배포
- iOS UITableView 출력안됨
- django 게시판
- django clean
- cleaned_data
- django 개발일지
- django 로그인접근
- django pythoneverywhere
- django tag
- 장고 태그달기
- ModelForm Form 차이
- Realtime Database
- UITableViewController Not Working
- 테이블출력안됨
- pythonanywhere배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함