코딩테스트/Python
[Python] 백준 #15649 - N과 M (1)
yo~og
2021. 11. 30. 21:38
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이
from itertools import permutations
N,M = map(int,input().split())
arr = [i for i in range(1,N+1)]
for a in list(permutations(arr,M)):
for i in a:
print(i,end=" ")
print()
순열을 사용하면 쉽게 풀수있는 문제이다..
하지만 문제의도는 백트래킹이기때문에 백트래킹으로 푼 코드를 들고와봤다!
def DFS():
if len(s) == M:
print(*s)
return
for i in range(1, N+1):
if visited[i]: # 이미 방문했으면 건너뜀
continue
# 방문 안했으면 방문체크 후, 출력 리스트에 넣음
visited[i] = True
s.append(i)
DFS() # 함수 다시 호출
s.pop() # 원상복귀 과정 필요
visited[i] = False
N, M = map(int, input().split()) # N:주어진 수, M:수열의 길이
s = [] # 출력 수열 넣을 리스트 (stack)
visited = [False] * (N+1) # 방문체크 할 리스트
DFS()