💡 부분집합 구하기(DFS)
2022. 4. 24. 22:51ㆍ코딩 테스트(JAVA)/인프런 문제풀이
자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램 을 작성하세요.
▣ 입력설명
첫 번째 줄에 자연수 N(1<=N<=10)이 주어집니다.
▣ 출력설명
첫 번째 줄부터 각 줄에 하나씩 부분집합을 아래와 출력예제와 같은 순서로 출력한다. 단 공집합은 출력하지 않습니다.
▣ 입력예제 1
3
▣ 출력예제 1
1 2 3
1 2
1 3
1
2 3
2
3
구현 코드
import java.util.*;
class Main {
// 전역, static으로 선언
// static으로 선언한 이유는 static 메인메서드에서도 사용해야하기 떄문
static int n;
static int[] ch;
public void DFS(int L){
if(L==n+1){
String tmp="";
for(int i=1; i<=n; i++){
// 체크배열 원소 1인 것 출력
if(ch[i]==1) tmp+=(i+" ");
}
// 공집합 제외
if(tmp.length()>0) System.out.println(tmp);
}
else{
ch[L]=1; // 포함함(o)
DFS(L+1); // 왼쪽
ch[L]=0; // 포함하지 않음(x)
DFS(L+1); // 오른쪽
}
}
public static void main(String[] args){
Main T = new Main();
n=3;
// 인덱스 0 필요없음, 0으로 초기화
ch=new int[n+1];
T.DFS(1);
}
}
'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글
중복순열 (0) | 2022.05.03 |
---|---|
💡 이진트리 순회(BFS: Breadth-First Search, 넓이우선탐색, 레벨탐색) (0) | 2022.04.24 |
피보나치 수열(재귀함수 이용) (0) | 2022.04.24 |
팩토리얼 (0) | 2022.04.24 |
이진수 출력 (0) | 2022.04.21 |