15649_N과 M(1)
백트래킹의 핵심은 가지치기
- 첫번째 풀이
visited 리스트를 활용하여 각 숫자 방문 표시
함수 인자를 1씩 증가시켜서 m개가 됐을때 모두 출력후 한 단계 빠져나옴
빠져나온뒤 방문 false 처리
n, m = map(int, input().split())
visited = [0] * (n+1)
arr = [0] * m
def backtracking(k):
if k == m:
print(*arr)
return
for i in range(1, n+1):
if not visited[i]:
arr[k] = i
visited[i] = 1
backtracking(k+1)
visited[i] = 0
backtracking(0)
- 두번째 풀이
visited 없이 풀기
리스트에 i를 넣어주고 다음 회차때 해당 i continue
n, m = map(int, input().split())
s = []
def backtracking():
if len(s) == m:
print(' '.join(map(str,s)))
return
for i in range(1, n+1):
if i in s:
continue
s.append(i)
backtracking()
s.pop()
backtracking()
Author And Source
이 문제에 관하여(15649_N과 M(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ykwon3357/15649N과-M1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)