728x90
    
    
  반응형
    
    
    
  
문제 제목: 부분집합 구하기 (DFS)
자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램 을 작성하세요

기본적으로 부분 집합을 구하는 방법


사용하는 상태와 사용하지 않는 상태가 있는 트리 => 상태트리

ch[v] = 1 # 해당 수를 사용 한다 (부분 집합에 포함한다.)
ch[v] = 0 # 해당 수를 사용 하지 않는다 (부분 집합에 포함하지 않는다.)




1 2 3 출력함


모범답안
def DFS(v):
    if v == n+1:
        for i in range(1, n+1):
            if ch[i] == 1:
                print(i, end= ' ') # 원소만 출력
            print()
    else:
        ch[v] = 1
        DFS(v+1)
        ch[v] = 0
        DFS(v+1)
        print()
if __name__ == "__main__":
    n = int(input())
    ch = [0]*(n+1)
    DFS(1)
+ DFS 로 만든 부분집합을 하나의 리스트에 입력하기
global 전역변수 사용
def DFS(v):
    global dfs_list
    if v == n+1:
        tmp = []
        for i in range(1, n+1):
            if ch[i] == 1:
                tmp.append(i)
        print(tmp)
        dfs_list.append(tmp)
    else:
        ch[v] = 1
        DFS(v+1)
        ch[v] = 0
        DFS(v+1)
        print()
    return dfs_list
if __name__ == "__main__":
    dfs_list = []
    n = int(input())
    ch = [0]*(n+1)
    DFS(1)
    print(dfs_list)
출력결과로 공집합이 포함됨을 알 수 있다.
728x90
    
    
  반응형
    
    
    
  'coding test - python > 기본기 문제' 카테고리의 다른 글
| 문제 / 바둑이 승차(DFS, 부분집합) / Python 파이썬 (0) | 2022.10.02 | 
|---|---|
| 문제 / 합이 같은 부분집합(DFS) / Python 파이썬 (0) | 2022.08.05 | 
| 문제 / 이진 트리 순회(깊이 우선 탐색) / Python 파이썬 (0) | 2022.08.03 | 
| 문제 / 재귀 함수를 이용한 이진수 출력 / Python 파이썬 (0) | 2022.08.03 | 
| 문제 / 회의실 배정 (그리디) / Python 파이썬 (0) | 2022.08.02 |