coding test - python/기본기 문제
문제 / 부분집합 구하기 (DFS) / Python 파이썬
sillon
2022. 8. 3. 22:48
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
반응형