1. 15649번 N과 M(1)
-
1부터 N까지의 자연수 중에서 중복 없이 M개를 고른 수열 구하기
-
수열은 사전 순으로 증가하는 순서로 출력해야 한다
-
itertools.permutations 쓰지말고 풀어보자.
def DFS(s):
global result
if len(result) == M:
print(" ".join(result))
return
for i in range(1, N+1):
# if i not in result:
if not visited[i]:
visited[i] = 1
result += str(i)
DFS(i)
result = result[:-1]
visited[i] = 0
N, M = map(int, input().split())
result = ""
visited = [0]*(N+1)
DFS(0)
- 방문한 건지 확인하는 visited 배열을 따로 둘 필요 없이,
- 주석 처리한 if i not in result:를 통해서도 판별이 가능하다.
-
그렇지만 visited 배열을 쓸 일이 많으므로, 연습할 겸 만들었다.
- visited 배열을 사용하지 않는다면 다음과 같다
def DFS(s):
global result
if len(result) == M:
print(" ".join(result))
return
for i in range(1, N+1):
if str(i) not in result:
result += str(i)
DFS(i)
result = result[:-1]
N, M = map(int, input().split())
result = ""
DFS(0)
- 20190825 ( 매개변수 사용해보기)
def DFS(s, num):
if len(num) == M:
print(num)
return
for i in range(1, N+1):
# if i not in result:
if not visited[i]:
visited[i] = 1
num += str(i)
DFS(i, num)
num = num[:-1]
visited[i] = 0
N, M = map(int, input().split())
visited = [0]*(N+1)
DFS(0, "")
참고자료 [BOJ문제]https://www.acmicpc.net/problem/15649