코딩테스트
[DFS] 6. 부분 집합 구하기
개발하는지호
2024. 2. 2. 09:02
<<풀이>>
항상 기억하자 DFS 문제는 if와 else 그리고 재귀함수로 되어 있다. 그리고 스택 프래임을 따른다!!
이 문제는 DFS를 사용하는데, 구성이 트리로 본다면 왼쪽은 추가 해준다. 오른 쪽은 추가 안 한다라고 잡고 시작을 한다.
이러한 원리로 해서 코딩 로직을 만들어 사용한다.
이때 ch이라는 배열의 초기화 시키고 왼쪽으로 가면 1를 추가해주고 오른쪽으로 가면 0을 추가해준다.
그리고 난 뒤 재귀함수로 다음으로 넘어간다. 그러다가 총 원소 갯수가 일치하게 되면 ch 배열에 있는 1을 가지고 있는 인덱스를 반환하는 방식으로 문제를 푼다.
class Main{
static int n;
static int[] ch;
public void DFS(int L) {
if (L == n + 1) {
String tmp = "";
for (int i = 1; i <= n; i++) {
if(ch[i] == 1) tmp += (i + " ");
}
if (tmp.length() > 0) System.out.println(tmp);
}else {
ch[L] = 1;
DFS(L + 1);
ch[L] = 0;
DFS(L + 1);
}
}
public static void main(String[] args) {
Main T = new Main();
n = 3;
ch = new int[n + 1];
T.DFS(1);
}
}
재귀함수에 대해 전체적인 이해도를 올리고 있지만 아직 부족한 것 같다. 계속 꾸준히 공부해 나가자.