자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 문제
def dfs(start):
if len(arr) == M:
print(*arr)
return
for i in range(1, N+1):
if i not in arr:
arr.append(i)
dfs(i+1)
arr.pop()
N, M = map(int, input().split())
arr = []
dfs(1)
itertools 모듈을 사용하거나 dfs로 구현가능한 문제이다. 하나의 리스트가 만들어 질때마다 출력해서 풀면 된다.
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 문제
def dfs(start):
if len(arr) == M:
print(*arr)
return
for i in range(start, N+1):
if i not in arr:
arr.append(i)
dfs(i+1)
arr.pop()
N, M = map(int, input().split())
arr = []
dfs(1)
N과 M (1) 문제에서 for문의 범위만 살짝 다르게 고치면 해결된다.
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 문제
def dfs(start):
if len(arr) == M:
print(*arr)
return
for i in range(1, N+1):
arr.append(i)
dfs(i+1)
arr.pop()
N, M = map(int, input().split())
arr = []
dfs(1)
N과 M (1) 문제에서 if문을 지워서 같은 수를 여러 번 고를 수 있게하면 해결된다.
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 문제
def dfs(start):
if len(arr) == M:
print(*arr)
return
for i in range(start, N+1):
arr.append(i)
dfs(i)
arr.pop()
N, M = map(int, input().split())
arr = []
dfs(1)
N과 M (3) 문제에서 if문을 지워서 같은 수를 여러 번 고를 수 있게하면 해결된다.
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 문제
def dfs(start):
if len(arr) == M:
print(*arr)
return
for i in range(N):
if data[i] not in arr:
arr.append(data[i])
dfs(i+1)
arr.pop()
N, M = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
arr = []
dfs(0)
입력으로 주어지는 수를 저장하고, 정렬해서 사용하면 해결된다.