반응형
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
코드
n, m = map(int,input().split())
s = []
visit = [False] * (n+1)
def dfs():
if len(s) == m:
print(*s)
return
for i in range(1,n+1):
if visit[i] == False:
visit[i] = True
s.append(i)
dfs()
s.pop()
visit[i] = False
dfs()
설명
백트래킹 문제는 처음 풀어봐서 다른 사람들의 풀이를 참고했다.
DFS와의 차이점은 DFS는 전부 검색하지만, 백트래킹은 방법이 아니면 중간에 나온다.
visit를 통해 이미 방문했는지 체크를 해줬고, s의 길이가 m과 같아질 때까지 s에 숫자를 넣어줬다. s를 출력해준 후에는 s.pop()을 통해 리스트에서 빼주고 visit를 다시 false로 바꿔준다.
반응형
'알고리즘 > 백트래킹' 카테고리의 다른 글
[백준][Python] 10974번 모든 순열 (0) | 2022.08.04 |
---|---|
[백준][Python] 1182번 부분수열의 합 (0) | 2022.08.03 |
[백준][Python] 15652번 N과 M (4) (0) | 2022.08.01 |
[백준][Python] 15651번 N과 M (3) (0) | 2022.08.01 |
[백준][Python] 15650번 N과 M (2) (0) | 2022.07.29 |
댓글